【发布时间】:2015-09-17 05:31:02
【问题描述】:
如果我在 C# 中从数据库中获取一些值,它们是类型对象。现在我想转换这些值typesafe 以将它们加载到我的对象中,该对象或多或少代表datarow。所以我认为为扩展对象创建一个通用的扩展方法会很好。
所以我构建了以下内容:
public static T ConvertToType<T>(this object value)
{
T returnValue = default(T);
if (value != DBNull.Value)
{
returnValue = (T)value;
}
return returnValue;
}
所以我可以使用它来转换来自给定datarow 的不同值,如果数据库存储null 值,我会得到默认类型。
例如:
foreach (DataRow row in myTable.Rows)
{
MyClass myObject = new MyClass();
myObject.Id = row["ID"].ConvertToType<int>();
}
这适用于编译时,但似乎不可能将对象转换为 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;
}
但可以肯定的是,编译器现在告诉我目标类型 T 不能转换为 int。这很清楚。
是否有人为这个问题找到了很好的解决方案?还是这不像我希望的那么简单。
【问题讨论】:
标签: c# type-conversion