考虑以下计划。我想知道为什么这段代码的行为方式不同。
这在编译期间返回错误:
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;
}
答案 0 :(得分:4)
这只是因为?
和&
被重载,并且还可以分别指示条件运算符和“地址”。编译器需要知道你的意思。这解决了它:
var getaccess = (val is int?) & result;
编译器消息不是完全清除,但为我们提供了线索:
CS0214 Pointers and fixed size buffers may only be used in an unsafe
(来自& result
)
CS1003 Syntax error, ':' expected
(来自?
)
和
CS1525 Invalid expression term ';'
(也来自?
,因为它希望在下一个分号之前有一个: {value if false}
表达式)
基本上,没有括号,它认为你的意思是:
var getaccess = (val is int) ? (&result)
(如果val
不 int