В экземпляре объекта не задана ссылка на объект.
Я продолжаю получать эту ошибку при запуске программы.
Ссылка на объект не установлена в экземпляр объекта. Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде. Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена в экземпляр объекта.
Source Error:
Line with error:
Line 156: if (strSearch == "" || strSearch.Trim().Length == 0)
Каков правильный способ его написания?
Ответы
Ответ 1
Правильный способ в .NET 4.0:
if (String.IsNullOrWhiteSpace(strSearch))
Используемый выше метод String.IsNullOrWhiteSpace
эквивалентен:
if (strSearch == null || strSearch == String.Empty || strSearch.Trim().Length == 0)
// String.Empty is the same as ""
Ссылка на метод IsNullOrWhiteSpace
http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
Указывает, является ли заданная строка ничто, пустой или состоит из только символы пробела.
В более ранних версиях вы могли бы сделать что-то вроде этого:
if (String.IsNullOrEmpty(strSearch) || strSearch.Trim().Length == 0)
Используемый выше метод String.IsNullOrEmpty
эквивалентен:
if (strSearch == null || strSearch == String.Empty)
Это означает, что вам по-прежнему необходимо проверить ваш случай "IsWhiteSpace" с помощью .Trim().Length == 0
в соответствии с примером.
Ссылка на метод IsNullOrEmpty
http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx
Указывает, является ли указанная строка ничто или пустая строка.
Объяснение:
Вам нужно убедиться, что strSearch
(или любая переменная, если на то пошло) не null
, прежде чем вы разыщите его с помощью символа точки (.
) - т.е. перед тем, как сделать strSearch.SomeMethod()
или strSearch.SomeProperty
вам нужно чтобы проверить, что strSearch != null
.
В вашем примере вы хотите убедиться, что ваша строка имеет значение, что означает, что вы хотите обеспечить строку:
- Не null
- Не пустая строка (
String.Empty
/""
)
- Это не просто пробел.
В вышеприведенных случаях вы должны поставить "Это нуль?" сначала, поэтому он не проверяет другие случаи (и ошибку), когда строка null
.
Ответ 2
Все версии .Net:
if (String.IsNullOrEmpty(strSearch) || strSearch.Trim().Length == 0)
.Net 4.0 или новее:
if (String.IsNullOrWhitespace(strSearch))
Ответ 3
strSearch в этом случае, вероятно, является нулевым (не просто пустым).
Попробуйте использовать
String.IsNullOrEmpty(strSearch)
если вы просто пытаетесь определить, не содержит ли строка.
Ответ 4
Я знаю, что это было опубликовано около года назад, но это для пользователей в будущем.
Я столкнулся с подобной проблемой. В моем случае (я постараюсь быть кратким, пожалуйста, дайте мне знать, если вы хотите более подробно), я пытался проверить, была ли строка пустой или нет (строка является предметом сообщения электронной почты). Он всегда возвращал то же сообщение об ошибке независимо от того, что я сделал. Я знал, что делаю это правильно, но он все равно повторял одно и то же сообщение об ошибке. Тогда во мне стало ясно, что я проверял, является ли предмет (строка) электронной почты (экземпляр/объект), что, если электронное письмо (экземпляр) уже было нулевым. Как я могу проверить предмет сообщения электронной почты, если письмо уже является нулевым. Я проверял, было ли электронное письмо пустым, оно отлично работало.
при проверке объекта (строки) я использовал методы IsNullorWhiteSpace(), IsNullOrEmpty().
if (email == null)
{
break;
}
else
{
// your code here
}
Ответ 5
Я хочу продлить ответ MattMitchell, сказав, что вы можете создать метод расширения для этой функции:
public static IsEmptyOrWhitespace(this string value) {
return String.IsEmptyOrWhitespace(value);
}
Это позволяет вызвать:
string strValue;
if (strValue.IsEmptyOrWhitespace())
// do stuff
Для меня это намного чище, чем вызов статической функции String
, но при этом остается безопасным NullReference!