Лучший способ написать нулевую ссылку с возвращаемым значением в c # - PullRequest
0 голосов
/ 01 октября 2018

Есть ли лучший способ написать эту нулевую проверку?Я проверяю таблицу с DataSet на нули.

if (dataSet == null || dataSet.Tables == null || dataSet.Tables[0].Rows == null)
{
    Console.WriteLine($"Error at {nameof(dataSet)}");
    return vatPeriodList;
}

Я работаю в ADO.NET.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Ваш чек не имеет смысла, а также забывает один важный.

  • DataSet.Tables также не может быть null, потому что это свойство только для чтения, вы не можете присвоить null, поэтому вторая проверка не имеет смысла.
  • dataSet.Tables[0].Rows не может быть null, поскольку это свойство только для чтения, вы не можете присвоить null, поэтому последняя проверка является избыточной.

Но вы забыли, что DataSet может быть пустым, поэтому не содержит DataTables.В этом случае ваш if создает исключение на dataSet.Tables[0].

Я бы использовал:

int? firstTablesRowCount = dataSet?.Tables.Cast<DataTable>().FirstOrDefault()?.Rows.Count;
if (firstTablesRowCount.GetValueOrDefault() == 0)
{
    Console.WriteLine($"Error at {nameof(dataSet)}");
}

Это гарантирует, что DataSet не является нулевым и содержит таблицы, а первая таблица содержит строки.

0 голосов
/ 01 октября 2018

Try

if(dataSet?.Tables?.FirstOrDefault()?.Rows == null) {}

FirstOrDefault() возвращает первую запись или ноль, если ее нет.

...