【发布时间】:2017-02-28 18:04:02
【问题描述】:
我正在尝试编写一个通用方法来从 DataRow 中的列返回值。
protected static T GetField<T>(DataRow row, string name, T defaultValue)
{
if (row == null)
{
throw new ArgumentNullException("row");
}
T result = defaultValue;
if (row.Table.Columns.Contains(name) && !row.IsNull(name))
{
result = row.Field<T>(name);
}
return result;
}
当尝试为特定测试分配值时,我得到“指定的强制转换无效。”例外。
var rule = new MyObj
{
AString = GetField(row, "AnswerId", "test"),
AnInt = GetField(row, "Decline", 0),
ADecimal = GetField(row, "LoadFactor", 1M),
};
我试图避免为每种类型编写重载。
这个可以吗?
【问题讨论】:
-
数据库中的“LoadFactor”是十进制的吗?
-
如果拒绝在数据库中位,您需要将布尔值作为第三个参数传递给 getField 方法。
-
您可以使用对象而不是泛型,并在对象创建时适当地进行强制转换。你考虑过这个吗?
-
@Jenish。是的,但 int 也给出了错误
-
@sphaso,是的。我只是想知道是否可以这样做。
标签: c# generics ado.net datarow