Visual Studio 2005 - ничего не проверять - PullRequest
3 голосов
/ 21 февраля 2012

Подскажите, пожалуйста, почему эта строка кода выдает ошибку: - "Ссылка на объект не установлена ​​на экземпляр объекта"

 searchstr = IIf(
    Not searchstr Is Nothing
    AndAlso searchstr.Length > 0,
    searchstr.Replace("Desig_id", "designation_id"), "")  

Также можете ли вы предоставить альтернативу для проверки этого типа?

Ответы [ 3 ]

6 голосов
/ 21 февраля 2012

Функция IIf ведет себя не так, как вы думаете.Это , а не оператор в троичном стиле в стиле C ++ или C #.Это просто обычная функция, которая означает, что обе ваши условные проверки и , которые выполняет searchstr.Replace, перед его передачей в IIf.Если searchstr имеет значение null, searchstr.Replace (...) генерирует исключение NullReferenceException, даже если вы ожидали, что оно вообще не будет вызываться.

Оператор If был добавлен в VS2008 для поддержки этого,но если вы находитесь в 2005 году, вы должны расширить его до блока If / Else:

If Not searchstr Is Nothing AndAlso searchstr.Length > 0 Then
    searchstr = searchstr.Replace("Desig_id", "designation_id")
Else
    searchstr = ""
End If
1 голос
/ 21 февраля 2012

iif это функция, а не оператор как c #?это означает, что нет выражения короткого замыкания.Также ваш код должен выглядеть так:

searchstr = IIf(
    String.IsNullOrEmpty(searchstr),
    searchstr.Replace("Desig_id", "designation_id"), "")  
0 голосов
/ 21 февраля 2012

Для удобства чтения лучше записать его как

If string.isnullorempty(searchstr) Then
  searchstr.Replace("Desig_id","designation_id")
else
  searchstr = string.empty
End if

. Isnullorempty проверяет длину и инициализацию строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...