gpt4 book ai didi

c# - DBNull 从 DataSet Cast 到 Nullable 构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 21:12:28 25 4
gpt4 key购买 nike

我有一个构造函数,其签名看起来像这样:

public Something(UInt64 uid, UInt64? parentUniqueId)
{
// ...
}

使用数据库检索的结果调用构造函数。 parentUniqueId 可能返回为 DBNull

目前,调用代码看起来像这样:

var s = new Something(uid: Convert.ToUint64(row[0]), ConvertTo.Unit64(row[1]))

那行不通,所以我尝试(在第二次转换中)执行 (Unit64?)row[1];但是,这太吓人了。

这里的挑战是 Something 是一个接受“指定”参数的基类,例如Unit64 并且它是从接受 DataRow 的继承类调用的。所以,你可以想象:

public SomethingSpecific(DataRow row)
: base(
uid: Convert.ToUInt64(row[0]))
// etc...
)
{ }

这可以一行吗?我将如何处理 DBNull 转换?

最佳答案

像这样编写你自己的转换方法:

public static class MyConvert
{
public static UInt64? ToUInt64OrNull(object value)
{
if(Convert.IsDBNull(value) || value == null)
{
return null;
}
else
{
return Convert.ToUInt64(value);
}

}
}

nullDBNull 是两个截然不同的值。所以你必须明确地处理它们。

然后像这样使用它:

var s = new Something(uid: Convert.ToUInt64(row[0]), MyConvert.ToUInt64OrNull(row[1]))

假设 row[0] 永远不会是 nullDBNull,但是 row[1] 可以是 DBNull,然后将作为 null 传递给构造函数。

这就是您在编写子类时使用它的方式:

public SomethingSpecific(DataRow row)
: base(
uid: Convert.ToUInt64(row[0]),
parentUniqueId: MyConvert.ToUInt64OrNull(row[1])
// etc...
)
{ }

关于c# - DBNull 从 DataSet Cast 到 Nullable 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769621/

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