Seb*_*ebi 3 c# type-conversion
如果我在C#中从数据库中获取一些值,它们就是类型对象.现在我想转换这些值以将typesafe它们加载到我的对象中,该对象代表datarow或多或少.所以我认为为扩展对象创建一个通用的扩展方法会很好.
所以我构建了以下内容:
public static T ConvertToType<T>(this object value)
{
T returnValue = default(T);
if (value != DBNull.Value)
{
returnValue = (T)value;
}
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
所以我可以使用它来转换给定的不同值datarow,如果数据库存储null值,我得到默认类型.
例如:
foreach (DataRow row in myTable.Rows)
{
MyClass myObject = new MyClass();
myObject.Id = row["ID"].ConvertToType<int>();
}
Run Code Online (Sandbox Code Playgroud)
这适用于编译时,但似乎不可能将对象转换int为例如.所以我认为所有的值类型都必须手动处理.
所以我扩展了第一个代码块:
public static T ConvertToType<T>(this object value)
{
T returnValue = default(T);
if (value != DBNull.Value)
{
if (wert is int)
{
rueckgabe = Convert.ToInt32(wert);
}
//else if All Value-Types are following...
else
{
returnValue = (T)value;
}
}
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
但是当然编译器现在告诉我目标类型T无法转换为int.这很清楚.
是否有人为这个问题找到了一个很好的解决方案?或者这不像我希望的那么简单.
这已经实施了.
你可以做 row.Field<int>("ID")
扩展方法在System.Data命名空间下
对于可空字段,你可以这样做row.Field<int?>("ID").Field返回null而不是default(T)DBNull