2

我有一个带有测试方法的 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.

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

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

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

这里 Nothing 将被转换为 int ( 0) 的默认值。我已经扩展了测试,dynamic然后分配的值为0. IE,

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

所以我的问题是,什么是Nothing?分配给 C# 类型时如何转换?或者我应该得出这样的结论:

如果 VB 方法返回Nothing并且值被分配给值类型的 C# 变量,则将分配方法返回类型的默认值。如果它被分配给引用类型变量,那么null将被分配。

4

1 回答 1

2

正如我在问题中提到的(我也假设过),Nothing表示任何数据类型(C#)的默认值default(T)。对于引用类型,默认值为空引用。对于值类型,默认值取决于值类型是否可以为空。

在我的 VB 代码中,该方法的返回值是 Integer (value type) 所以没有什么是它的默认值0。这就是为什么0也分配给动态类型的原因。但它不是 的替代品null或不等同于null

于 2016-06-22T04:03:25.443 回答