不能隐式地将类型'char'转换为Test <char>类型,为什么?</char>

时间:2013-04-10 15:42:06

标签: c# char type-conversion console-application

我正在为后来接受C#独立学习的学生制作示例程序。我以为我理解<T>但显然我缺少一些神奇的秘密,可以让我充分利用它。

当我尝试制作变量时,它可以正常工作:

 static Test<char> c = new Test<char>('n');

正如你所看到的那样,它已经实例化了。

现在,当我通过Console.Read()将其分配给不同的值时,它会给我错误: 无法将'char'类型隐式转换为'ConsoleApplication1.Test<char>'

我试过了两个:

c = (char)Console.Read();

c = Convert.ToChar(Console.Read());

甚至:(我知道这样做是愚蠢的,但我很生气,想看看它是否会起作用)

c = (char)Convert.ToChar(Console.Read());

所以,我对如何继续感到困惑。请帮助。

编辑: Test类中的当前构造函数:

    public Test() { }//empty constructor

    public Test(T obj)
    {
        variable = obj;
    }//filled constructor

1 个答案:

答案 0 :(得分:4)

Test<char>不是char。它是一种新的泛型类型(Test<T>)(可能)与提供的类型参数(即T)的对象有关。在您的示例中,您已声明要使用char类型作为此泛型类型的类型参数。

想象一下,Test<T>上有T类型的属性:

class Test<T>{
    public T MyTypeValue { get; set; }
}

然后,您可以创建此泛型类型的新实例,并为该属性分配您尝试获取的事物的实例(在本例中,控制台读取):

static Test<char> c = new Test<char>(){ MyTypeValue = 'n'};

由于MyTypeValue属于char类型,通过泛型类型的T类型参数,您可以为其分配实际char,但不能c {{1}} 1}}。也就是说,没有实现@Austin建议的其他转换方法。