У меня есть библиотека классов 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#, он выдает ошибку как null, когда возвращаемое значение равно Nothing
.
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
.
Nothing
, поэтому вместо этого они устанавливаются в значение по умолчанию для типа. Ссылочные типы на самом деле могут бытьNothing
. - person Cody Gray   schedule 22.06.2016