关于语言设计的空闲问题,请参阅"Does C# have a right hand if like Perl"。
例如,在最近的C系列语言中
z = foo ( a, b, c );
评估 a
,然后b
,然后c
,从左到右。
z = a ? b : c;
a
会被评估,然后是b
或c
,从而从左到右依次进行评估。
在Python中,您将条件表达式编写为
z = b if a else c
所以订单是相同的 - a
,然后是b
或c
,但它不是从左到右。
严格的从左到右的顺序被放入Java中以简化语言;排序是依赖于C或C ++的实现。
答案 0 :(得分:3)
从右到左分配(有点):
int a = b + c;
b + c得到评估,然后分配给。
总的来说,C#设计师一直试图保留大部分内容 - >正确。一个很好的例子是LINQ。在这里,他们没有使用传统的SQL排序(SELECT XXX FROM XXX),而是故意将查询重新排序为更左 - >右。
// Note the left->right ordering:
var results = from member in collection where member.element == condition select member;
// Which is equivelent to:
var resultsNonLinq = collection.Where().Select();
这是我喜欢C#的原因之一 - 语言的一致性非常令人耳目一新,特别是与perl这样的语言相比时,有很多方法可以做简单的事情。
答案 1 :(得分:3)
不,它不会检查MS C#lang规范或ECMA334规范(第14章)
答案 2 :(得分:0)
答案 3 :(得分:0)
C#有三元运算符:
result = a == b ? c : d
相当于
if (a == b)
result = c;
else
result = d;
这不是严格的向右,但它确实减少了所需代码的数量。
答案 4 :(得分:0)
你忘记在你的问题中提出任何实际问题......我认为你的意思是标题是问题......;)
您可以使用扩展程序和委托来制作看似从右到左评估的内容。实际上它仍然是从左到右进行评估,但是左边的代码放在一个委托中,只根据右边条件的结果使用。
您可以使用名称If。
对Action委托进行扩展public static class PostCondition {
public static void If(this Action action, bool condition) {
if (condition) action();
}
}
现在您可以创建一个委托,将其强制转换为Action,并在其上调用If方法:
((Action)(() => Console.WriteLine("Yes"))).If(true);
如果将它分成两个语句,它会变得更清晰:
Action writeYes = () => Console.WriteLine("Yes");
writeYes.If(true);
不过,无论如何,它并不比普通的if语句真正改善......
答案 5 :(得分:0)
我假设你实际上指的是右关联运算符,它们是运算符右侧的运算符。
C#中的大多数运算符都是左关联的,除了:
从技术上讲,还有另外一个:三元运算符(a?b:c),但这是一个如此不同的野兽,它几乎不能作为右关联运算符。