无法将类型“ T”的值分配给类型“ T”的实例

时间:2020-07-17 16:38:06

标签: c# .net generics .net-core

我正在编写避免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

1 个答案:

答案 0 :(得分:2)

您需要先将其转换为object

value = (T)(object)"";

即使您已经检查了类型兼容性,编译器也不会考虑这一点。就您而言,您有一个T和一个string,它们没有直接转换。您必须先将字符串反跳到object(对此有直接强制转换),然后强制转换为T,就编译器而言,它可能会失败,但不会因为您已经检查了类型!