gpt4 book ai didi

c# - 拆箱数据库值的正确方法

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:55 24 4
gpt4 key购买 nike

我正在使用较旧的 Oracle 数据库,我觉得可能有更好的方法来拆箱我从数据库中检索到的值。

目前,我有一个充满不同类型特定方法的静态类:

public static int? Int(object o)
{
try
{
return (int?)Convert.ToInt32(o);
}
catch (Exception)
{
return null;
}
}

..等等不同的类型,但我觉得应该有更好的方法?如果我想拆箱一个值,我会按照...

int i;
i = nvl.Int(dataRow["column"]); //In this instance, "column" is of a numeric database type

我考虑过使用泛型类来处理所有不同的类型,但我真的想不出最好的方法。

有什么想法吗?

最佳答案

我发现以下辅助方法在您的场景中很有用 - 测试 DBNull 比在您的示例中捕获异常更有效:

public static MyHelper
{
public static Nullable<T> ToNullable<T>(object value) where T : struct
{
if (value == null) return null;
if (Convert.IsDBNull(value)) return null;
return (T) value;
}

public static string ToString(object value)
{
if (value == null) return null;
if (Convert.IsDBNull(value)) return null;
return (string)value;
}
}

这适用于字符串和您将遇到的常见原始值类型(int、decimal、double、bool、DateTime)。

它与您的示例略有不同,因为它是强制转换而不是转换 - 但我个人更喜欢这个。 IE。如果数据库列是 NUMERIC(十进制),如果我想将值转换为 int,我宁愿明确,例如:

int? myIntValue = (int?) MyHelper.ToNullable<decimal>(reader["MyNumericColumn"]);

关于c# - 拆箱数据库值的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923498/

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