gpt4 book ai didi

c# - 如何将对象转换为泛型

转载 作者:行者123 更新时间:2023-11-30 13:55:38 24 4
gpt4 key购买 nike

如果我在 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。这很清楚。

有没有人能很好地解决这个问题?或者这并没有我希望的那么简单。

最佳答案

这已经实现了。

你可以做到 row.Field<int>("ID")

扩展方法在System.Data下命名空间

对于可为空的字段,您可以执行 row.Field<int?>("ID")因为 .Field 返回 null 而不是 default(T)对于 DBNull

关于c# - 如何将对象转换为泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32623163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com