相关疑难解决方法(0)

什么是解除运营商?

我正在看这篇文章,并且正在努力遵循解释提升运算符的VB.NET示例.似乎没有相应的C#示例或教程.我一般都没有太多关于运算符重载的经验,因此在阅读可空类型的同时尝试使用VB.NET等价物可能不是最好的开始...

是否有人能够解释提升的运算符以及它们如何被可空类型使用?它只是意味着可空类型本身不会重载运算符,并将使用它所代表的基础类型的运算符吗?

关于提升的运营商似乎没有太多关于SO的信息,所以希望这也可以帮助其他人.

.net c# nullable lifted-operators

56
推荐指数
1
解决办法
9364
查看次数

使用Null条件运算符检查可能为null的对象的值

我一直在玩C#6的Null Conditional Operator(这里有更多信息).

我非常喜欢语法,我认为它使代码更具可读性,但我认为当你遇到一个本身可能为null的对象上的属性值时,代码究竟要做什么是值得怀疑的.

例如,如果我有一个带有十进制属性的类,并且我想要对该十进制值进行条件检查,我会写如下:

if (foo?.Bar > max)
{
   // do something
}
Run Code Online (Sandbox Code Playgroud)

从表面上看,这看起来很棒......如果foo不为null,则获取Bar的值并检查它是否大于最大值,如果是,则执行某些操作.

但是,如果foo为null会怎么样?!

这篇关于C#6的新功能和改进功能的文档说明了这些内容:

如果实际上对象的值为null,则null条件运算符将返回null.它将对Bar的调用短路,并立即返回null,避免编程错误,否则会导致NullReferenceException.

我在这里写了一个小提琴,表明它确实起作用,正在做我期待它做的事情但是我无法理解它是如何决定条件的结果.

短路如何等于假?在我的脑海中,这段代码现在要说"如果foo为null,检查null是否> max,这是不可能的,所以返回false"或"如果foo为null,那么foo!= null将返回false,所以你得到一个假"但文档说null条件检查返回null,而不是false.

c# c#-6.0 null-conditional-operator

17
推荐指数
2
解决办法
1439
查看次数

为什么?.Any()被归类为可以犯罪的布尔?

我有以下代码:

if (Model.Products?.Cards?.Any())
{
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试这个它会抛出一个错误:

不能转换bool?布尔

搜索到这个之后,我不确定为什么会抛出错误,因为它允许我这样做

if (Model.Products?.Cards?.Count > 0)
{
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能.Any()在这种情况下使用- 为什么它被归类为可空的bool但计数不是可以为空的int?

c# linq

7
推荐指数
1
解决办法
183
查看次数