我正在编写避免Convert.ChangeType()
开销的代码。但是我要挂一个细节,如下所示。
public void GetValue(out T value)
{
if (typeof(T) == typeof(string))
value = (T)""; // <== Cannot convert 'string' to 'T'
// ...
}
我有一个知道的类型为T
的值,但是如何以最小的开销将该值分配给类型为T
的实例?我真的希望有个简单快捷的方法。否则,我将废弃代码并在Convert.ChangeType()
块中使用try...catch
。
答案 0 :(得分:2)
您需要先将其转换为object
:
value = (T)(object)"";
即使您已经检查了类型兼容性,编译器也不会考虑这一点。就您而言,您有一个T
和一个string
,它们没有直接转换。您必须先将字符串反跳到object
(对此有直接强制转换),然后强制转换为T
,就编译器而言,它可能会失败,但不会因为您已经检查了类型!