【发布时间】:2017-05-31 12:57:56
【问题描述】:
我认为T? 只是Nullable<T> 的编译器简写。根据MSDN:
语法
T?是Nullable<T>的简写,其中T是一个值类型。 这两种形式可以互换。
但是,有一点(微不足道的)区别:Visual Studio 不允许我以速记方式调用静态方法:
bool b1 = Nullable<int>.Equals(1, 2); //no error
bool b2 = int?.Equals(1, 2); //syntax error "Invalid expression term 'int'"
为什么?这种限制有什么原因吗?
【问题讨论】:
-
这是一个很好的问题,虽然我不知道那是什么意思,我们会尝试用 Nullable
.Equals(1, 2) 测试什么? (我不是刻薄,这是一个真正的问题) -
从 C# 6 开始,
?.用作空条件检查,因此是语法错误。使用不能将?.识别为单个运算符的早期版本时,情况可能会有所不同。 -
@TetsuyaYamamoto
int绝对不是表达式也不是变量,因此不能进行空条件检查。没有歧义。 -
不。不限于 C#6 在 5 中也不起作用。
-
@HansPassant 语言规范明确提到“the two forms can be used interchangeably”。如果这确实是表达式解析器的限制,并且实际上并没有得到规范的支持,那么它就是编译器中的一个错误。
标签: c# .net syntax-error nullable