当int?和Nullable <int>是一样的,为什么它们以不同的方式表现?

时间:2017-07-17 08:44:58

标签: c# .net nullable

考虑以下计划。我想知道为什么这段代码的行为方式不同。

这在编译期间返回错误:

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;
}

1 个答案:

答案 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

,那么该怎么办?