法一、HasValue 和 Value
int? m = GetM(); if (m.HasValue) { m.Value; }
法二、!= null 和 Convert
int? m = GetM(); if (m != null) { Convert.ToInt32(m); }
HasValue 与 != null
这两个都是一样的。
HasValue 是属性,可能有些人不能理解,这都 null 了,怎么还能使用其属性呢?不出错吗?不出错,这是 Nullable 类型的特点。
注意:上面是 int? 类型,不能对 int 类型用 HasValue、!= null。
Value 与 Convert
Value 则要注意了,必须要有值,才能调用 Value,这跟 HasValue 不一样。
而 Convert 转换时,它是 null 也没问题,不会出错,结果是对应类型的默认值,int 是 0。
使用哪种方法都可以,看个人习惯、风格、实际场景。