什么时候int?和 Nullable<int> 是一样的,为什么它们的行为方式不同?
When int? and Nullable<int> are the same, why do they behave in a different way?
考虑以下程序。我想知道为什么这段代码的行为方式不同。
编译时返回错误:
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;
}
这仅仅是因为?
和&
被重载了,也可以分别表示条件运算符和"address of"。编译器需要知道你的意思。这修复了它:
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
则缺少表达式)
考虑以下程序。我想知道为什么这段代码的行为方式不同。
编译时返回错误:
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;
}
这仅仅是因为?
和&
被重载了,也可以分别表示条件运算符和"address of"。编译器需要知道你的意思。这修复了它:
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
则缺少表达式)