VB проверяет наличие нулевой ссылки при передаче ByRef

#vb.net #null #pass-by-reference #nothing

#vb.net #null #передача по ссылке #ничего

Вопрос:

У меня есть функция, которая принимает строку по ссылке:

 Function Foo(ByRef input As String)
  

Если я назову это так:

 Foo(Nothing)
  

Я хочу, чтобы это делало что-то другое, чем если бы я вызывал это так:

 Dim myString As String = Nothing
Foo(myString)
  

Возможно ли обнаружить это различие в способе вызова метода в VB .NET?

Редактировать

Чтобы пояснить, какого черта я хотел бы это сделать, у меня есть два метода:

 Function Foo()
  Foo(Nothing)
End Function

Function Foo(ByRef input As String)
  'wicked awesome logic here,  hopefully
End Function
  

Вся логика заключается во второй перегрузке, но я хочу выполнить другую ветвь логики, если Nothing была передана в функцию, чем если бы была передана переменная, содержащая Nothing .

Комментарии:

1. Почему вы хотите это сделать?

2. Потому что у меня перегрузка функции, но перегрузка вызывает перегрузку другой функции и ничего не передает для этого параметра.

3. @Брэндон: Да, но в таком случае вам должно быть все равно, каким способом это было создано. Функция должна просто запускаться, зная, что она получает Nothing в качестве входных данных.

4. @Brandon: Если вам действительно нужно другое поведение при вызове вашей перегрузки, вы должны поместить это в перегруженную функцию.

5. Я отредактировал вопрос, чтобы уточнить, почему я хотел бы это сделать.

Ответ №1:

Нет. В любом случае метод «видит» ссылку на строку ( input ), которая ни на что не указывает.

С точки зрения метода, они идентичны.

Комментарии:

1. Спасибо за все разъяснения, Рид.

Ответ №2:

Вы могли бы добавить проверку нулевой ссылки либо:

1) перед вызовом функции

 If myString IsNot Nothing Then 
     Foo(myString)
End If
  

2) или внутри функции

 Function Foo(ByRef input As String)
    If input Is Nothing Then
        Rem Input is null
    Else
        Rem body of function
    End If
End Function