示例代码:
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("name"); }
我的问题是:
使用row["name"]
和之间有区别row.Field
吗?当然,第二种方式将价值转化为某种类型,但又有另一种区别吗?
哪种方法更好用?
Грозный.. 16
请参阅备注部分,其中描述的主要差异:
该数据集类代表空与价值的实例值的DBNull类.访问具有空值的列的语言集成查询(LINQ)表达式将在运行时生成 InvalidCastException.此外,DataSet不支持可空类型.Field方法支持将列作为可空类型进行访问.如果DataSet中的基础值为Value,则返回的可空类型的值为 null.
如果指定的DataColumn的值为null并且T是引用类型或可空类型,则返回类型将为null.Field方法不会返回Value.
Field方法不执行类型转换.如果需要类型转换,则应首先使用Field方法获取列值.然后应将列值转换为另一种类型.
最后一段提到了一点,因为我经常看到数字存储为数据库中的字符串,因此在数据检索时需要varchar
进行int
转换,因此在这种情况下使用DataColumn会更好,例如:
int test = row.Field("Test"); // InvalidCastException int test = Convert.ToInt32(row["Test"]); // Works like a charm
DataRowExtensions.Field
首先出现在.NET 3.5中,它"提供对指定行中每个列值的强类型访问.Oield方法还支持可空类型."
Afaik,row["name"]
返回object
,row.Field
返回一个String
.我们不应该比较苹果和梨,因此你应该问什么更好:
row["name"].ToString()
vs row.Field
和答案是:他们是一样的.
请参阅备注部分,其中描述的主要差异:
该数据集类代表空与价值的实例值的DBNull类.访问具有空值的列的语言集成查询(LINQ)表达式将在运行时生成 InvalidCastException.此外,DataSet不支持可空类型.Field方法支持将列作为可空类型进行访问.如果DataSet中的基础值为Value,则返回的可空类型的值为 null.
如果指定的DataColumn的值为null并且T是引用类型或可空类型,则返回类型将为null.Field方法不会返回Value.
Field方法不执行类型转换.如果需要类型转换,则应首先使用Field方法获取列值.然后应将列值转换为另一种类型.
最后一段提到了一点,因为我经常看到数字存储为数据库中的字符串,因此在数据检索时需要varchar
进行int
转换,因此在这种情况下使用DataColumn会更好,例如:
int test = row.Field("Test"); // InvalidCastException int test = Convert.ToInt32(row["Test"]); // Works like a charm
DataRowExtensions.Field
首先出现在.NET 3.5中,它"提供对指定行中每个列值的强类型访问.Oield方法还支持可空类型."
Afaik,row["name"]
返回object
,row.Field
返回一个String
.我们不应该比较苹果和梨,因此你应该问什么更好:
row["name"].ToString()
vs row.Field
和答案是:他们是一样的.