是否可以这样编码:public static T GetValue(string name,Type T){…}

本文关键字:name string Type GetValue 编码 是否 static public | 更新日期: 2023-09-27 17:54:57

我需要这样编码:

public static T GetValue(this SerializationInfo si, string name,Type T)
{
    return (T) si.GetValue(name, typeof (T));
}
我已经知道下面的代码可以正常工作
public static T GetValue<T>(this SerializationInfo si, string name)
{
    return (T) si.GetValue(name, typeof (T));
}

和我的代码是c#,有人能帮忙吗?

是否可以这样编码:public static T GetValue(string name,Type T){…}

第一个示例中的返回类型T没有引用任何有效类型:在这种情况下,T只是传递给方法的参数的名称

你要么在设计时知道类型,要么不知道,如果你不知道,那么你唯一的选择就是返回类型Object,或者其他基本类型或接口。

不,您不能这样做,因为泛型是在编译时评估的(并且您正在要求动态泛型)。你能提供更多关于用法的上下文吗?

如何将t参数传递给所需的示例?如果它只是由typeof(int)作为参数,那么为什么不使用通用示例呢?

考虑这个例子:

Type t = GetTypeInfoBasedOnNameInAFile();
int a = GetValue(someSerializationInfo, "PropertyName", t);

编译器如何知道Type t将在运行时被转换为int ?

你能做的是让GetValue返回一个对象,然后:

Type t = GetTypeInfoBasedOnNameInAFile();
int a = (int)GetValue(someSerializationInfo, "PropertyName", t);

但是,当然,如果你这样做意味着你在编译时知道预期的类型,那么为什么不直接使用泛型形参呢?

您可以通过使用dynamic变量来实现您所追求的(我不确定上下文/用法)。

您可以在运行时将类型转换为:

Convert.ChangeType(sourceObject, destinationType);

我相信这就是语法。当然,如果不可能强制转换,这将抛出异常。