不能将类型'char'隐式转换为类型Test ,为什么?
我正在制作一个示例程序,供稍后参加C#独立学习的学生使用。我以为我明白<T>
,但显然我缺乏一些神奇的秘密,使我可以充分利用它。不能将类型'char'隐式转换为类型Test <char>,为什么?
当我尝试做一个变量,它工作正常:
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
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
由通用型的T
类型参数的方法是char
类型,你可以指定一个实际char
它,但只是不到c
。也就是说,没有实施一些其他的转换方法,就像奥斯汀所暗示的那样。
我创建的变量作为全球所以我相信它会静态测试
构造函数之后的{}'语法是[object initializer]的一个示例(http://msdn.microsoft.com /en-us/library/vstudio/bb384062.aspx)。您不包括您正在修改的实例名称。它被认为是新的实例。 (另外,我编辑了我的回应:构造函数调用丢失了parens。) – Peter 2013-04-10 20:14:04
语法不是我添加的,格式化程序必须在发布时进行更改。我实际上将它们作为括号。 – joesumbody122 2013-04-11 15:09:41
那么在第一种情况下,你正在调用构造函数。在其他情况下,你不是。是否有任何理由不使用'c = new Test((char)Console.Read())'? –
2013-04-10 15:45:38
我不想在这一点上做一个新的变量,所以为什么我会再次调用构造函数? – joesumbody122 2013-04-10 15:53:00
因为您正在尝试创建一个新的*实例* Test'Test'。我认为你对变量和构造函数之间的关系感到困惑。 –
2013-04-10 15:58:26