私はテストメソッドを持つ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
あるとき、それはヌルとしてエラーがスローされます。 Nothing
を意味
VBTestLib.Class1 classObject = new VBTestLib.Class1();
string objectStringValue = classObject.testMethod().ToString(); // Error
は(null.ToString()
が許可されていない)null
に変換されます。今、次の例を考えてみます。
int objectIntValue = classObject.testMethod(); // objectIntValue = 0
ここで何がint型(0
)のデフォルト値に変換されません。私はdynamic
を使ってテストを延長し、割り当てられた値も0
です。すなわち、
dynamic objectDynamicValue = classObject.testMethod();// objectDynamicValue = 0
私の質問は、Nothing
とは何ですか? C#型に代入されるとどのように変換されますか? VB法はNothing
を返し、値がメソッドの戻り値の型のデフォルト値が割り当てられることになる値型のC#の変数に割り当てられている場合
:または私はと結論しなければなりません。参照型変数に割り当てられている場合は、
null
が割り当てられます。
あなたは自分の質問に答えました... –
あなたの例 - testMethod()に問題があります.ToString()はVBでは "0"で、空の文字列ではありません。 –
あなたの結論は、VBメソッドがVBかC#から呼び出されたかどうかにかかわらず正しいです。 –