可为空的对象必须具有一个值 是啥原因啊 求解 谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可为空的对象必须具有一个值 是啥原因啊 求解 谢谢相关的知识,希望对你有一定的参考价值。

参考技术A 如果是两个值是空的话,进行比较,会出现这个错误
最好改改 逻辑
先判断 两个值是否为空
参考技术B jh

如何从大量可为空的布尔值中返回布尔值?

【中文标题】如何从大量可为空的布尔值中返回布尔值?【英文标题】:How can I return a bool value from a plethora of nullable bools? 【发布时间】:2012-12-06 04:48:32 【问题描述】:

使用此代码:

private bool AtLeastOnePlatypusChecked()

    return ((ckbx1.IsChecked) ||
            (ckbx2.IsChecked) ||
            (ckbx3.IsChecked) ||
            (ckbx4.IsChecked));

...我被

拦住了
Operator '||' cannot be applied to operands of type 'bool?' and 'bool?

那么我该如何实现呢?

【问题讨论】:

merriam-webster.com/dictionary/plethora 【参考方案1】:

您可以使用以下内容:

(ckbx1.IsChecked.HasValue && ckbx1.IsChecked.Value)

【讨论】:

|| 应该是&& 运算符吗?如果cbx1.IsChecked.HasValuefalse,那么在获取ckbx1.IsChecked.Value 时会有一个Null Reference【参考方案2】:

试试:

return ((ckbx1.IsChecked ?? false) ||
        (ckbx2.IsChecked ?? false) ||
        ...

【讨论】:

【参考方案3】:

您可以将|s 链接在一起,最后使用空合并运算符:

return (ckbx1.IsChecked | cxbx2.IsChecked | cxbx3.IsChecked | cxbx4.IsChecked) ?? false;

如果任一操作数为true,提升的| 运算符返回true,如果两个操作数均为false,则返回false,如果任一操作数为null 而另一个不是@,则返回null 987654333@.

这不是短路,但我认为在这种情况下这对你来说不是问题。

或者,更可扩展地,将复选框放入某种集合中。然后你可以使用:

return checkboxes.Any(cb => cb.IsChecked ?? false);

【讨论】:

我终于知道“提升”是什么意思了。我在使用表达式树时遇到了这个术语。 我也对这个词很好奇,但它看起来像Jon has already answered that question 我相信 |操作数不使用短路评估,因此可能会对性能产生轻微影响,在本示例中可能可以忽略不计。 @OlivierJacot-Descombes:有关详细讨论,请参阅 blogs.msdn.com/b/ericlippert/archive/2007/06/27/…。此外,如果您对这个主题感兴趣,我将在本月晚些时候在我的新博客(ericlippert.com)中回到这个主题。 @JeppeStigNielsen:我在离开之前修复了 Roslyn 中的那个错误。我不再是“那些家伙”中的一员了。 :-)【参考方案4】:

我假设如果为 null,那么它将为 false,您可以使用 ??运算符。

 private bool AtLeastOnePlatypusChecked()
 
      return ((ckbx1.IsChecked ?? false) ||
      (ckbx2.IsChecked ?? false) ||
      (ckbx3.IsChecked ?? false) ||
      (ckbx4.IsChecked ?? false));
 

【讨论】:

【参考方案5】:

在您的方法中使用?? 运算符;

private bool AtLeastOnePlatypusChecked()

return ((ckbx1.IsChecked ?? false) ||
        (ckbx2.IsChecked ?? false) ||
        (ckbx3.IsChecked ?? false) ||
        (ckbx4.IsChecked ?? false)

【讨论】:

【参考方案6】:

您可以使用GetValueOrDefault() 获取值或false

private bool AtLeastOnePlatypusChecked()

    return ((ckbx1.IsChecked.GetValueOrDefault()) ||
            (ckbx2.IsChecked.GetValueOrDefault()) ||
            (ckbx3.IsChecked.GetValueOrDefault()) ||
            (ckbx4.IsChecked.GetValueOrDefault()));

【讨论】:

以上是关于可为空的对象必须具有一个值 是啥原因啊 求解 谢谢的主要内容,如果未能解决你的问题,请参考以下文章

在 Typescript 中将可为空的对象值转换为字符串

Redshift:sortkey 和 distkey 可以为空吗?

使用 XmlSerializer 将空 xml 属性值反序列化为可为空的 int 属性

如何从数据库中获取可为空的 DateTime

检查可为空的布尔值是不是为空[重复]

退出构造函数时,不可为空的属性必须包含非空值。考虑将属性声明为可为空