Ответ 1
См. раздел замечаний, основные отличия, описанные там:
Класс DataSet представляет значения null с помощью экземпляра Value класса DBNull. Выражение языкового интегрирования (LINQ) который обратился к столбцу со значением null, InvalidCastException во время выполнения. Кроме того, DataSet не работает поддерживаются типы с нулевым. Метод Field обеспечивает поддержку для доступ к столбцам как с возможностью NULL. Если базовое значение в DataSet - значение, возвращаемый тип с нулевым значением будет иметь значение нулевым.
Если значение указанного DataColumn равно null и T является тип ссылки или тип NULL, тип возврата будет null. Метод поля не возвращает значение.
Метод 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 также поддерживает типы с нулевым.
Afaik, row["name"]
возвращает object
, row.Field<string>("name")
возвращает a String
.
Мы не должны сравнивать яблоки и груши, поэтому вы должны спрашивать, что лучше:
row["name"].ToString()
vs row.Field<string>("name")
и ответ таков: они одинаковы.