c# - 什么时候int?和 Nullable<int> 是相同的,为什么它们的行为方式不同?

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

最佳答案

这只是因为 ?& 被重载,并且还可以分别指示条件运算符和“地址”。编译器需要知道你的意思。这修复了它:

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/

相关文章:

c# - 数字相似度算法

c# - xamarin.android.support.compat 28.0.0.1 与 netstandard2.0 不兼容

c# - 如何使用表达式树调用带有引用变量的方法

c# - 指定单个方法作为多个 Controller URL 的目标

vb.net - 使用可为空数据类型的属性分配文本框文本

c# - 在 uml 中表示 C# 自动实现的属性

c# - LINQ 查询中无法访问的表达式代码

.net - 从第 3 方源恢复 NuGet 包

c# - 如何在不遍历元素的情况下将 int 数组转换为可为 null 的 int 数组?

C# Entity Framework 在不可为空字段的过滤器之后选择最大值