【发布时间】:2016-06-22 03:21:24
【问题描述】:
我有一个带有测试方法的 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
这里 Nothing 将被转换为 int 的默认值 (0)。我已经使用dynamic 扩展了测试,那么分配的值也是0。即,
dynamic objectDynamicValue = classObject.testMethod();// objectDynamicValue = 0
所以我的问题是,Nothing 是什么?分配给 C# 类型时如何转换?或者我应该得出结论:
如果 VB 方法返回
Nothing并将值分配给值类型的 C# 变量,则将分配方法返回类型的默认值。如果将其分配给引用类型变量,则将分配null。
【问题讨论】:
-
您回答了自己的问题...
-
您的示例有问题 - testMethod().ToString() 在 VB 中为“0”,而不是空字符串。
-
无论是从VB还是C#调用VB方法,你的结论都是正确的。
-
值类型(本质上是基元和结构)不能是
Nothing,因此它们被设置为该类型的默认值。引用类型实际上可以是Nothing。