目前,当我遍历DataRow实例时,我会这样做.
foreach(DataRow row in table)
return yield new Thingy { Name = row["hazaa"] };
Run Code Online (Sandbox Code Playgroud)
不久之后(即早点),我会让桌子丢失驴柱,便便会撞到粉丝.经过一些广泛的谷歌搜索(大约30秒)后,我发现了以下保护语法.
foreach(DataRow row in table)
if(row.Table.Columns.Contains("donkey"))
return yield new Thingy { Name = row["hazaa"] };
else
return null;
Run Code Online (Sandbox Code Playgroud)
现在 - 这是最简单的语法吗?!真?我期待一个方法,如果它存在,则获取该字段,否则为null.或者直接在行上至少包含一个Contains方法.
我错过了什么吗?我将以这种方式在许多领域进行映射,因此代码看起来会非常难以理解......
Var*_*n K 89
您可以创建一个扩展方法以使其更清晰:
static class DataRowExtensions
{
public static object GetValue(this DataRow row, string column)
{
return row.Table.Columns.Contains(column) ? row[column] : null;
}
}
Run Code Online (Sandbox Code Playgroud)
现在调用它如下:
foreach(DataRow row in table)
return yield new Thingy { Name = row.GetValue("hazaa") };
Run Code Online (Sandbox Code Playgroud)
Hes*_*her 13
由于您的DataTable表始终具有相同的列(它们不会对任何行进行更改),因此您只需要检查一次列名.
if (table.Columns.Contains("donkey"))
{
foreach ...
}
Run Code Online (Sandbox Code Playgroud)
Seb*_*nes 13
我真的很喜欢@Varun K 采取的方法。因此,以此为出发点,我只想投入我的两分钱,以防它对其他人有帮助。我只是对其进行了改进,使其变得 通用,而不是仅仅使用对象作为返回类型。
static class Extensions
{
public static T Get<T>(this DataRow self, string column)
{
return self.Table.Columns.Contains(column)
? (T)self[column]
: default(T);
}
}
}
Run Code Online (Sandbox Code Playgroud)
要以 Varun K 的答案为基础,请使用泛型类型参数:
public static T GetValue<T>(this DataRow row, string column)
{
if (!row.Table.Columns.Contains(column))
return default(T);
object value = row[ColumnName];
if (value == DBNull.Value)
return default(T);
return (T)value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51512 次 |
| 最近记录: |