Проверка String.IsNullOrEmpty с ячейкой таблицы данных - PullRequest
0 голосов
/ 06 февраля 2020

Если у меня есть таблица данных, и я хочу увидеть, является ли значение, содержащееся в указанной ячейке c, пустым, я бы использовал это.

foreach(DataRow row in DataTable.Rows)
{
    bool isEmpty = String.IsNullOrEmpty(row["MyColumn"].ToString());
}

, но что произойдет, если значение в row["MyColumn"] это null. Не будет ли .ToString() исключение? Тем не менее, когда я пытаюсь выполнить следующее ..

bool isEmpty = String.IsNullOrEmpty(row["MyColumn"]);

я получаю недопустимое исключение аргумента, потому что метод IsNullOrEmpty() ищет строковый объект.

Итак, как правильно проверить если указанная ячейка c в таблице данных пуста или равна нулю?

Ответы [ 3 ]

4 голосов
/ 06 февраля 2020

Измените свое утверждение на это,

bool isEmpty = String.IsNullOrEmpty(row["MyColumn"]?.ToString());

?. означает запуск процесса .ToString () только если строка ["MyColumn"] не равна нулю.

1 голос
/ 06 февраля 2020

Вместо этого можно использовать Field<T>() метод DataRow:

bool isEmpty = String.IsNullOrEmpty(row.Field<string>("MyColumn")); 

Это обеспечивает строго типизированный доступ к значениям строки.

Вы можете использовать его и с другими типами, поэтому нет необходимости разбирать, например, int или DataTime.

var myDate = row.Field<DateTime>("MyDate");   // DateTime
var myInt = row.Field<int>("MyInt");          // int

Он также работает с nullable типами:

var myDate = row.Field<DateTime?>("MyDate");  // DateTime? (Nullable)
if (myDate.HasValue) 
{
    ...
}
1 голос
/ 06 февраля 2020

В основном, просто добавив это ради полноты ... но если по какой-то причине вы не используете C# 6 или выше, вы всегда можете сделать это «старомодным способом»:

bool isEmpty = row["MyColumn"] == null || string.IsNullOrEmpty(row["MyColumn"].ToString());
...