- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我负责 LINQ 提供程序,该提供程序对 C# 代码执行一些运行时评估。例如:
int? thing = null;
accessor.Product.Where(p => p.anInt == thing.GetValueOrDefault(-1))
目前,由于 thing
为空,上述代码不适用于我的 LINQ 提供程序。
虽然我已经使用 C# 很长时间了,但我不知道 GetValueOrDefault 是如何实现的,因此我应该如何解决这个问题。
所以我的问题是:GetValueOrDefault
在调用它的实例为空的情况下如何工作?为什么不抛出 NullReferenceException
?
后续问题:鉴于我需要处理空值,我应该如何使用反射复制对 GetValueOrDefault
的调用。
最佳答案
thing
不是 null
.由于结构不能是 null
, 所以 Nullable<int>
不可能是null
.
事情是......它只是编译器的魔法。你认为是null
.事实上,HasValue
刚刚设置为 false
.
如果您调用 GetValueOrDefault
它检查是否 HasValue
是true
或 false
:
public T GetValueOrDefault(T defaultValue)
{
return HasValue ? value : defaultValue;
}
关于c# - GetValueOrDefault 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626329/
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 5 天前关闭。 Improve
我负责 LINQ 提供程序,该提供程序对 C# 代码执行一些运行时评估。例如: int? thing = null; accessor.Product.Where(p => p.anInt == th
我正在尝试从列表中获取一些值。但我想确保如果 key 不存在,它将返回默认值 0而不是抛出异常。 var businessDays = days.Where(x => x.Year == year).
我定义了一个像这样的自定义类型的字典, public readonly Dictionary _viewMappings = new Dictionary(); 现在当我尝试做的时候 _viewMa
努力使用非常简单的代码,这些代码在其他类中可以使用类似代码的地方不起作用。如果我删除 GetValueOrDefault(),它将无法编译。我也在使用 System.Linq。我收到此运行时错误:LI
对于数字,它总是相同的漂亮: if(a < 123) { ... } // disregards if `b` is `int?` or `int` 但是对于 bool?: bool? b = ...
我是一名优秀的程序员,十分优秀!