如果我在C#中从数据库获取一些值,它们的类型是object。现在我想将这些值转换为类型安全的,以加载到表示
所以我构建了以下内容:
但是编译器现在告诉我目标类型 T 无法转换为
是否有人有解决这个问题的好方案?或者这并不像我希望的那样简单。
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
,这很明显。是否有人有解决这个问题的好方案?或者这并不像我希望的那样简单。