【问题标题】:Cannot convert double? to double [duplicate]不能转双?加倍[重复]
【发布时间】:2019-07-01 18:16:52
【问题描述】:

net,我正在尝试验证属性的值是否为 NaN 但它给了我'不能转换双倍?为以下代码加倍'这个错误,但如果我删除'?在模型中,所有方法都可以正常工作 你能帮忙看看如何验证双重身份吗?是否为 NaN。

public class abcDTO
{
    public double? CondPot { get; set; }
    public double? WaterPot { get; set; }
    public double? WaterInjPot { get; set; }
}
-------

public async Task<abcDTO> UpdateWellDeferment(abcDTO abc)
{
    if (HasValue(abc.CondPot))
        throw new ArgumentException($"CondPot is not a valid number");

        .....       
}

public static bool HasValue(double val)
{
    return Double.IsNaN(val);
}

【问题讨论】:

  • 那个?标记nullable 类型。尝试使用 nullables 中的 default HasValue(),或者如果您确实想要小数,请考虑使用 .GetValueOrDefault()
  • 您不想知道数据库中的值是否为NULL 吗?那么如果abc.CondPot == null?
  • 将其更改为HasValue(double? val) 并检查return val.HasValue &amp;&amp; !Double.IsNaN(val.Value)(我想这是正确的逻辑)
  • 将你的 if HasValue() 函数转换为 double?(又名 Nullable&lt;double&gt;),然后检查它是否内置于 HasValue 属性(docs.microsoft.com/en-us/dotnet/api/…)以及它的 Not-A-数量性
  • 为什么要查IsNaN? (你可以用一个双零除以零)

标签: c# entity-framework


【解决方案1】:

@Jaynesh,

当您使用可为空的数据类型时,添加 ?那里的运营商。唯一可以是 NaN 的是 Null 正确吗?所以你应该简单地检查变量是否有值。您可以通过调用在 Nullable 上执行此操作。

abc.CondPot.HasValue

获取价值

abc.CondPot.Value

【讨论】:

  • 谢谢,我修好了
【解决方案2】:

这只是从Nullable&lt;T&gt;(实际上是当您使用? 为值类型名称添加后缀时)到T 的有限自动转换。

您需要在其他地方进行转换,并决定如何处理null

例如。当 0 是一个很好的默认值时:

if (HasValue(myNullableDouble ?? 0.0) { ...

其他时候你需要更丰富的东西:

if (myNullableDouble.HasValue && HasValue(myNullableDouble.Value)) {
  // Has a value
} else {
  // null or NaN
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 2016-05-21
    • 2014-03-02
    • 2014-11-24
    • 1970-01-01
    • 2019-10-21
    • 2019-11-08
    • 2019-07-09
    相关资源
    最近更新 更多