为什么我可以这样做?
if (integerList.Direction == "ascending") {
integerList.Integers.OrderBy(i => i.IntegerValue);
} else{
integerList.Integers.OrderByDescending(i => i.IntegerValue);
}
但不是这个?
integerList.Direction == "ascending" ? integerList.Integers.OrderBy(i => i.IntegerValue)
: integerList.Integers.OrderByDescending(i => i.IntegerValue);
它返回错误:
only assignment, call, increment, decrement, await and new object expressions can be used as a statement.
最佳答案
因为这段代码调用了给定的操作(不管分支),这本身就是一个语句,因此是允许的,
if (integerList.Direction == "ascending") {
integerList.Integers.OrderBy(i => i.IntegerValue);
} else{
integerList.Integers.OrderByDescending(i => i.IntegerValue);
}
然而,使用三元运算符,你最终会得到一个表达式,它本身是不允许的,因为它被认为是一个空操作,当然除了,如错误所说,它是一个新的对象表达式,
integerList.Direction == "ascending"
? integerList.Integers.OrderBy(i => i.IntegerValue)
: integerList.Integers.OrderByDescending(i => i.IntegerValue);
操作的结果它并没有被实际消费,所以整个OrderBy
都被浪费了。
试试这个,
var intergersOrdered =
integerList.Direction == "ascending"
? integerList.Integers.OrderBy(i => i.IntegerValue)
: integerList.Integers.OrderByDescending(i => i.IntegerValue);
将三元运算符转换为赋值语句。
关于c# - 为什么我可以使用 If Else 语法而不是三元运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19148835/