考虑以下程序。我想知道为什么这段代码的行为方式不同。
这在编译时返回错误:
void access<T>(T val, bool result){
var getaccess = val is int? & result;
}
这不会返回任何错误:
void access<T>(T val, bool result){
var getaccess = val is Nullable<int> & result;
}
最佳答案
这只是因为 ?
和 &
被重载,并且还可以分别指示条件运算符和“地址”。编译器需要知道你的意思。这修复了它:
var getaccess = (val is int?) & result;
编译器消息并不完全清楚,但给了我们线索:
CS0214 Pointers and fixed size buffers may only be used in an unsafe
(来自 & 结果
)
CS1003 Syntax error, ':' expected
(来自?
)
和:
CS1525 Invalid expression term ';'
(它也来自 ?
,因为它需要在下一个分号之前有一个 : {value if false}
表达式)
基本上,如果没有括号,它认为您的意思是:
var getaccess = (val is int) ? (&result)
(如果 val
不是 int
时缺少表达式,该怎么办)
关于c# - 什么时候int?和 Nullable<int> 是相同的,为什么它们的行为方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45139607/