是否可以这样编码: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#,有人能帮忙吗?
第一个示例中的返回类型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);
我相信这就是语法。当然,如果不可能强制转换,这将抛出异常。