Оператор IF проверяет наличие нуля или String.Empty - PullRequest
0 голосов
/ 04 мая 2020

Итак, у меня есть список с некоторыми данными, такими как входной путь, выходной путь, а также заголовки столбцов. Как можно видеть, существует шесть заголовков столбцов, однако некоторые из них могут быть нулевыми, поскольку их не нужно использовать. Из-за этого я создал метод фильтрации данных, чтобы остались только полезные данные.

List<string> data = new List<string> { "C:/", "C:/Documents", "Hello", Goodbye". null, null, null, null } // Data to be passed into method
List<string> filteredData = new List<string>();

public void FilterData(List<string> data)
{
   foreach (var d in data)
   {
      if (d != null || d != String.Empty)
      {
         filteredData.Add(d);
      }
   }
}

Почему, когда я передаю Список data в этот метод, ни одна из данных не фильтруется, так что filteredData будет содержать то же самое, что и data, но когда я использую следующее (если оператор только оценивает, если не ноль), он фильтрует правильно?

public void FilterData(List<string> data)
    {
       foreach (var d in data)
       {
          if (d != null)
          {
             filteredData.Add(d);
          }
       }
    }

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Проблема в том, что вы используете логическое ИЛИ, когда вам следует использовать логическое И.

Вы хотите добавить его, только когда оно не нулевое И не пустое.

КСТАТИ : Есть более простой способ:

foreach (var d in data)
{
      if (!String.IsNullOrEmpty(d))
      {
          ....
2 голосов
/ 04 мая 2020

Вы:

if (d != null || d != String.Empty)

Это всегда так, поскольку d не может быть одновременно null и ""; оно должно отличаться от хотя бы одного из них.

Некоторые правильные альтернативы:

if (d != null && d != "")
if (!(d == null || d == ""))
if (!string.IsNullOrEmpty(d))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...