Анализ int из ячейки DataRow

Как можно анализировать значение int из ячейки DataRow?

Int32.Parse(item["QuestionId"].ToString());

Этот код работает, но выглядит слишком много. Также возможно обрабатывать значения DBNull?

Ответ 1

Если вы знаете, что это int, вы должны просто указать его соответствующим образом, что самый безопасный и эффективный подход:

int questionId = item.Field<int>("QuestionId");  // similar to (int) item["QuestionId"]

Метод Field также поддерживает типы с возможностью NULL, поэтому, если он может быть null:

int? questionId = item.Field<int?>("QuestionId");
if(questionId.HasValue) Console.Write(questionId.Value);

Если это на самом деле a string (почему?), вы должны отправить его на string и использовать int.Parse:

int questionId = int.Parse(item.Field<string>("QuestionId"));

Если вы действительно не знаете, что это такое, вы можете использовать System.Convert.ToInt32:

int questionId = System.Convert.ToInt32(item["QuestionId"]);

Ответ 2

Если то, что помещено в эту ячейку, на самом деле просто int, используйте:

(int)item["QuestionId"]

В противном случае проверьте тип среды выполнения item["QuestionId"], если это byte, например, используйте (byte)item["QuestionId"]. Если вы не уверены, то:

Convert.ToInt32(item["QuestionId"])

вероятно, будет работать, но это менее элегантно.