我需要像这样编码:
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#中, 有人可以帮忙吗?
答案 0 :(得分:1)
不,你不能这样做,因为泛型是在编译时评估的(你要求动态泛型)。你能提供一些关于用法的更多背景信息吗?
您如何将t
参数传递给您想要的示例?如果只是typeof(int)
作为参数,那么为什么不使用通用的例子?
考虑这个例子:
Type t = GetTypeInfoBasedOnNameInAFile();
int a = GetValue(someSerializationInfo, "PropertyName", t);
编译器如何知道Type t
在运行时可以转换为int
?
你可以做的是让GetValue返回一个Object然后:
Type t = GetTypeInfoBasedOnNameInAFile();
int a = (int)GetValue(someSerializationInfo, "PropertyName", t);
但是,当然,如果你这样做,它意味着你知道编译时的预期类型,那么为什么不只是使用泛型参数。
您可以使用dynamic
变量来实现您所追求的目标(我不确定上下文/用法)。
答案 1 :(得分:1)
第一个示例中的返回类型T
未引用任何有效类型:T
在这种情况下只是传递给方法的参数的名称。
您要么在设计时知道类型,要么不知道,如果不知道,那么您唯一的选择是返回类型Object
或其他基本类型或接口。
答案 2 :(得分:0)
您可以将运行时转换为类型:
Convert.ChangeType(sourceObject, destinationType);
我相信这就是语法。当然,如果无法进行演员,这将抛出异常。