class Test<string, T> : System.Collections.Concurrent.ConcurrentDictionary<string, T>
上面的代码返回两个错误:
CS1001预期标识符
CS1003语法错误,','预期
但是,在测试中大写string
不会产生任何错误。
class Test<String, T> : System.Collections.Concurrent.ConcurrentDictionary<string, T>
有人可以解释为什么编译器在string
为小写时会产生这些错误,但在大写时不会产生这些错误?
答案 0 :(得分:7)
当您编写class Test<string, T>
时,您尝试定义新类型参数并命名类型参数string
。 string
不是某种类型的有效标识符,因为它是该语言中的保留字。 String
不是该语言中的保留字;它是您提供新类型参数的有效名称,因此代码可以正常工作。
或至少,&#34;工作&#34;从某种意义上说,您现在已将您的新类型命名为String
。但你实际上并不想这样做;你不希望有一个名为 String
的新类型参数,你只想让你的字典中的密钥为String
,所以只需不要在所有中定义新的类型参数:
class Test<T> : System.Collections.Concurrent.ConcurrentDictionary<string, T>
在相关的说明中,您可能根本不应该继承ConcurrentDictionary
。它不是一种旨在继承的类型。您可能只想编写一个,并拥有自己的类型,只需将ConcurrentDictionary作为字段。