Почему при пустом текстовом поле выполняется условие?
У меня есть метод
public void createFile() {
if (!richTextBox.Text.Length.Equals(null)) {
DialogResult result = MessageBox.Show(
"Сохранить файл?",
"Сохранение",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly
);
if (result == DialogResult.Yes) {
this.saveFileAs();
richTextBox.Clear();
}
};
}
Вызываю его по нажатии на кнопку моего текстового редактора. Почему при пустом текстовом поле срабатывает первое условие? Хотя в поле нет текста (и пробелов тоже). Вот скрин
Ответы (3 шт):
Потому что у пустого поля Text равен пустой строке?
if (!string.IsNullOrEmpty(richTextBox.Text)) {
Длина текста пустого поля — 0, а не null. Это разные значения, следующий код выведет False:
Console.WriteLine(0.Equals(null));
null обычно используется для обозначения отсутствия чего-то, а не пустого размера.
Корректное сравнение может выглядеть так:
if(richTextBox.Text.Length!=0)
Но лучше воспользоваться вариантом @Igor, он лучше читается.
Даже если у текстового поля или RichTextEdit будет, или не будет текста, вы проверяете:
richTextBox.Text.Length.Equals(null)
Где в свойстве Length тип int (не ссылочный), а он не может быть равен null.
Проверяйте не длину текста, а содержание текста, т.е.:
if(!string.IsNullOrEmpty(...)) { ... }
или если вам не нужно и пробелы, то:
if(!string.IsNullOrWhiteSpace(...)) { ... }