一尘不染

类型“ T”的值不能转换为

c#

这可能是一个新手问题,但是Google令人惊讶地没有提供答案。

我有这种相当人为的方法

T HowToCast<T>(T t)
{
    if (typeof(T) == typeof(string))
    {
        T newT1 = "some text";
        T newT2 = (string)t;
    }

    return t;
}

来自C ++背景,我期望它能起作用。但是,对于上述两个分配,它都无法通过“不能将类型’T’隐式转换为字符串”和“不能将类型’T’转换为字符串”进行编译。

我在概念上做错了或者语法错误。请帮助我解决这个问题。

谢谢!


阅读 242

收藏
2020-05-19

共1个答案

一尘不染

即使它在一个if块中,编译器也不知道Tstring
因此,它不允许您进行投射。(出于同样的原因,您无法转换DateTimestring

您需要转换为object,(任何人T都可以转换为),然后从那里转换为string(因为object可以转换为string)。
例如:

T newT1 = (T)(object)"some text";
string newT2 = (string)(object)t;
2020-05-19