См. Раздел примечаний , здесь описаны основные различия:
Класс DataSet представляет ноль значений с экземпляром Value DBNull класс.Выражение Language-Integrated Query (LINQ), которое обращалось к столбцу со значением null , генерировало бы InvalidCastException во время выполнения.Кроме того, DataSet не поддерживает обнуляемые типы .Метод Field обеспечивает поддержку доступа к столбцам в виде nullable .Если базовым значением в DataSet является Value, возвращаемый тип Nullable будет иметь значение null .
Если значение указанного DataColumn равно нулю и T - это ссылочный тип или обнуляемый тип, тип возвращаемого значения будет null .Метод Field не будет возвращать Value.
Метод Field не выполняет преобразования типов.Если требуется преобразование типа, сначала необходимо получить значение столбца с помощью метода Field.Затем значение столбца следует преобразовать в другой тип.
В последнем абзаце подчеркивается, что я часто видел числа, хранящиеся в виде строк в базе данных, поэтому преобразование varchar
в int
будеттребуется при извлечении данных, поэтому в этом случае лучше использовать DataColumn, например:
int test = row.Field<int>("Test"); // InvalidCastException
int test = Convert.ToInt32(row["Test"]); // Works like a charm
DataRowExtensions.Field<T> Method (DataRow, String)
впервые появился в .NET 3.5, и он "обеспечивает строго типизированный доступ к каждому из значений столбца вуказанная строка. Метод Field также поддерживает типы nullable . "
Afaik, row["name"]
возвращает object
, row.Field<string>("name")
возвращает String
.Мы не должны сравнивать яблоки и груши, поэтому вы должны спросить, что лучше:
row["name"].ToString()
против row.Field<string>("name")
и ответ: они одинаковые.