C# 空合并运算符后表达式的性能
我有下一个表达:C# 空合并运算符后表达式的性能,c#,.net,C#,.net,我有下一个表达: var max = items.FirstOrDefault(x => x.Key > date).Value; if (max == null) { max = items.FirstOrDefault(x => x.Key < date).Value; } var max=items.FirstOrDefault(x=>x.Key>date).Value; 如果(max==null) { max=items.FirstOrDefault(
var max = items.FirstOrDefault(x => x.Key > date).Value;
if (max == null)
{
max = items.FirstOrDefault(x => x.Key < date).Value;
}
var max=items.FirstOrDefault(x=>x.Key>date).Value;
如果(max==null)
{
max=items.FirstOrDefault(x=>x.Key
我想这样缩短它:
var max =
items.FirstOrDefault(x => x.Key > date).Value ?? // this line
items.FirstOrDefault(x => x.Key < date).Value;
var max=
items.FirstOrDefault(x=>x.Key>date).值???//这条线
items.FirstOrDefault(x=>x.Key
这里有一个问题:C#是否足够聪明,不会在三元运算符之前执行两次行
换言之,我希望三元运算符不会转换成这样的形式:
var max =
items.FirstOrDefault(x => x.Key > date).Value == null ?
items.FirstOrDefault(x => x.Key > date).Value :
items.FirstOrDefault(x => x.Key < date).Value;
var max=
items.FirstOrDefault(x=>x.Key>date)。值==null?
items.FirstOrDefault(x=>x.Key>date)。值:
items.FirstOrDefault(x=>x.Key
您的术语已关闭。??
运算符是空合并运算符。三元运算符实际上是第二个条件运算符:condition?表达式1:expression2
空合并运算符未编译为三元条件表达式。它被明确指定为短路运算符
根据C#规范:
形式为A?的空合并表达式??b要求a为可空类型或引用类型。如果a为非空,则a的结果为??b是a;否则,结果为b。该操作仅在a为null时计算b
相比之下,示例中的条件运算符可能会执行两次“大于”查询。如下所述:
形式b的条件表达式?x:y首先计算条件b。然后,如果b为真,则计算x并将其作为操作的结果。否则,y将被计算并成为操作的结果。条件表达式从不同时计算x和y
你的术语错了。
??
运算符是空合并运算符。三元运算符实际上是第二个条件运算符:condition?表达式1:expression2
空合并运算符未编译为三元条件表达式。它被明确指定为短路运算符
根据C#规范:
形式为A?的空合并表达式??b要求a为可空类型或引用类型。如果a为非空,则a的结果为??b是a;否则,结果为b。该操作仅在a为null时计算b
相比之下,示例中的条件运算符可能会执行两次“大于”查询。如下所述:
形式b的条件表达式?x:y首先计算条件b。然后,如果b为真,则计算x并将其作为操作的结果。否则,y将被计算并成为操作的结果。条件表达式从不同时计算x和y
你的术语错了。
??
运算符是空合并运算符。三元运算符实际上是第二个条件运算符:condition?表达式1:expression2
空合并运算符未编译为三元条件表达式。它被明确指定为短路运算符
根据C#规范:
形式为A?的空合并表达式??b要求a为可空类型或引用类型。如果a为非空,则a的结果为??b是a;否则,结果为b。该操作仅在a为null时计算b
相比之下,示例中的条件运算符可能会执行两次“大于”查询。如下所述:
形式b的条件表达式?x:y首先计算条件b。然后,如果b为真,则计算x并将其作为操作的结果。否则,y将被计算并成为操作的结果。条件表达式从不同时计算x和y
你的术语错了。
??
运算符是空合并运算符。三元运算符实际上是第二个条件运算符:condition?表达式1:expression2
空合并运算符未编译为三元条件表达式。它被明确指定为短路运算符
根据C#规范:
形式为A?的空合并表达式??b要求a为可空类型或引用类型。如果a为非空,则a的结果为??b是a;否则,结果为b。该操作仅在a为null时计算b
相比之下,示例中的条件运算符可能会执行两次“大于”查询。如下所述:
形式b的条件表达式?x:y首先计算条件b。然后,如果b为真,则计算x并将其作为操作的结果。否则,y将被计算并成为操作的结果。条件表达式从不同时计算x和y
为什么要缩短它?它损害了可读性,在这种情况下甚至可能引入未知行为。随着c#被编译,它是否有点冗长无关紧要,因此我认为没有理由脱离编写的代码。这是一个微观优化,最终只会浪费时间寻找这种类型的代码进行“优化”,或者在以后对这种行为进行故障排除。@Travis:Resharper让我这么做的。。。我必须这样做,它迫使我在IF:)下显示丑陋的下划线。请看phoog的答案。您的第二个示例是正确的,它没有编译到third@TravisJ:我不同意,与第一个代码相比,-运算符更具可读性和详细性。实际上我建议把??在换行符上(如?和:在三元运算符中)。@crazy_crank-你知道详细的意思,对吧?为什么要缩短它?它损害了可读性,在这种情况下甚至可能引入未知行为。作为c#i