VB.NET编译:
Dim intResult As Integer = Nothing
C#没有:
int intResult = null; // cannot convert
结果最终如何转到MSIL?
比VB代码还好:
If intResult > Nothing Then
修改
好的,MS says:
为变量赋值Nothing将其设置为其声明类型的默认值。
但它没有说明Nothing
比较。
答案 0 :(得分:8)
Nothing
实际上等同于C#中的default(Type)
。
所以int intResult = default(int);
是C#的等价物。
根据VB.NET Language Reference:“为变量赋值没有将其设置为其声明类型的默认值。如果该类型包含变量成员,则它们都被设置为默认值。”
修改:关于与Nothing
的比较:
我猜intResult > Nothing
被解释为intResult > 0
,因为编译时类型intResult
是Integer
,其默认值为0.如果intResult的类型在编译时不知道(例如,它是一个盒装Integer
),我怀疑这不会编译。
有关类似示例(Nothing < 2
),请参阅VB.NET语言参考页面底部的Community Content section。
答案 1 :(得分:0)
Int在c#中不可为空。如果您愿意,可以使用System.Nullable<int>
简称
int? result = null
。