nir*_*mus 19 c# datatable datarow
示例代码:
DataTable table = new DataTable();
// ...
// insert column to table
table.Columns.Add("name");
// ...
// insert value to table
foreach (DataRow row in table.Rows) {
row["name"];
row.Field<string>("name");
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
row["name"]和之间有区别row.Field<string>("name")吗?当然,第二种方式将价值转化为某种类型,但又有另一种区别吗?Гро*_*ный 16
请参阅备注部分,其中描述的主要差异:
该数据集类代表空与价值的实例值的DBNull类.访问具有空值的列的语言集成查询(LINQ)表达式将在运行时生成 InvalidCastException.此外,DataSet不支持可空类型.Field方法支持将列作为可空类型进行访问.如果DataSet中的基础值为Value,则返回的可空类型的值为 null.
如果指定的DataColumn的值为null并且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
Run Code Online (Sandbox Code Playgroud)
DataRowExtensions.Field<T> Method (DataRow, String)首先出现在.NET 3.5中,它"提供对指定行中每个列值的强类型访问.Oield方法还支持可空类型."
Afaik,row["name"]返回object,row.Field<string>("name")返回一个String.我们不应该比较苹果和梨,因此你应该问什么更好:
row["name"].ToString()vs row.Field<string>("name")
和答案是:他们是一样的.