我有这样的代码:
foreach (DataRow row in dataTable.Rows) { if ((string)row["Forename"] != record.Forename) { // Do something } }
伟大的作品,但如果row["Forename"]
是null
在数据库中,它实际上是DBNull
在这里,它不能施放DBNull
为一个字符串,或执行之间的比较DBNull
和string
.一些值也是nullable
,它不能比较DBNull
与int?
有没有帮助方法让我做好比较,还是我必须自己写一个扩展方法?
您可以使用DataRow.Field
支持可空类型的扩展方法:
foreach (DataRow row in dataTable.Rows) { int? id = row.Field<int?>("ID"); if(id.HasValue) { Console.Write("ID: " + id.Value); } }
由于它string
是一个引用类型,因此null
默认情况下.您可以改用DataRow.IsNull
它来检查是否DBNull.Value
:
foreach (DataRow row in dataTable.Rows) { if(row.IsNull("Forename")) { // ... } else { string foreName = row.Field<string>("Forename"); Console.Write("ForeName: " + foreName); } }