实际上,什么都没有 - 它是如何转换的



我有一个带有测试方法的VB类库。将返回整数(有时会返回Nothing)。

Public Class Class1
    Public Function testMethod() As Integer
        'Some code here
        Return Nothing
    End Function
End Class 

如果我在VB项目中调用该方法,则一切都按预期效果很好。例如:

  Dim output As String = testMethod().ToString() ' Works fine and output =""

但是,当我通过在C#应用程序中创建对象来调用该方法时,当返回值为 Nothing时,它将以null的形式丢弃错误。

VBTestLib.Class1 classObject = new VBTestLib.Class1();
string objectStringValue = classObject.testMethod().ToString(); // Error

这意味着Nothing将转换为null(不允许null.ToString())。现在考虑下一个示例:

 int objectIntValue = classObject.testMethod(); // objectIntValue = 0

这里什么都不会转换为int的默认值(0)。我已经使用dynamic扩展了测试,然后分配的值是0。即,

 dynamic objectDynamicValue = classObject.testMethod();// objectDynamicValue = 0

所以我的问题是,什么是Nothing?分配给C#类型时如何将其转换?还是我得出的结论是:

如果VB方法返回Nothing并将值分配给值类型的C#变量,则将分配方法的返回类型的默认值。如果将其分配给参考类型变量,则将分配null

正如我在问题中提到的那样(我也假设), Nothing表示任何数据类型的默认值(c# default(T))。对于参考类型,默认值是null引用。对于价值类型,默认值取决于值类型是否可为空白。

在我的VB代码中,该方法的返回值是整数(值类型),因此没有什么是其默认值0。这就是为什么0也分配给动态类型的原因。但这不是null的替代方案,也不等于null

相关内容

  • 没有找到相关文章

最新更新