c# - 如何将 C# 可为空的 int 转换为 int

标签 c# nullable

如何将可为空的 int 转换为 int?假设我有 2 种类型的 int,如下所示:

int? v1;  
int v2; 

我想将v1 的值分配给v2v2 = v1; 会导致错误。如何将 v1 转换为 v2

最佳答案

到目前为止其他答案都是正确的;我只想再添加一个稍微干净一点的:

v2 = v1 ?? default(int);

任何Nullable<T>可以隐式转换为其 T , 前提是被评估的整个表达式永远不会导致对 ValueType 的空赋值。因此,空合并运算符 ??只是三元运算符的语法糖:

v2 = v1 == null ? default(int) : v1.Value;

...这又是 if/else 的语法糖:

if(v1==null)
   v2 = default(int);
else
   v2 = v1.Value;

此外,从 .NET 4.0 开始,Nullable<T>有一个“GetValueOrDefault()”方法,它是一个 null 安全的 getter,基本上执行上面显示的 null 合并,所以这也有效:

v2 = v1.GetValueOrDefault();

关于c# - 如何将 C# 可为空的 int 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5995317/

相关文章:

c# - 以编程方式创建表单并在表单中显示位图?

c# - Graph API 日历 View 事件分页

c# - 报告/监控长流程进度的设计模式

c# - 重载方法签名 - 编译器将可空类型视为常规值类型的同义词

java - 避免对 bean 属性进行大量 != null 检查

C# 创建 MIME 消息?

c# - 从 Windows 8/WinRT 中的不同线程更新 UI 元素

c# - 即使对象具有值,ASP.NET MVC 5 Razor 也会抛出 'Nullable object must have a value'

c# - 为什么 LINQ SQL 语法不考虑可空性推断?

java - fragment 问题中的 NullPointerException