2016-06-22 6 views
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あるとき、それはヌルとしてエラーがスローされます。 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が割り当てられます。

+0

あなたは自分の質問に答えました... –

+1

あなたの例 - testMethod()に問題があります.ToString()はVBでは "0"で、空の文字列ではありません。 –

+0

あなたの結論は、VBメソッドがVBかC#から呼び出されたかどうかにかかわらず正しいです。 –

答えて

2

I質問で述べたように(Iも同様とする)、Nothingは、任意のデータ型(C#default(T))のデフォルト値を表します。参照型の場合、デフォルト値はnull参照です。値型の場合、デフォルト値は値型がNULL可能かどうかによって異なります。

私のVBコードでは、メソッドの戻り値はInteger(値型)なので、デフォルト値0は何もありません。そのため、0も動的タイプに割り当てられています。しかし、nullの代替手段ではないか、nullと等価ではありません。

関連する問題