C# Expressions

Expressions 由 operands 和 operators 组成。

有一个 operand 的 operators 称为一元操作符 unary operators,比如 ++;有两个 operands 的 operators 称为二元操作符 binary operators,比如 +;有三个 operands 的 operators 称为三元操作符 ternary operators,C# 只有一个,即 conditional operator ?:

当 expression 有多个 operators 时,operators 的优先级决定计算顺序,比如 x + y * zx + (y * z)

当 operators 的优先级一样时,operators 的 结合性决定计算顺序。二元操作符除 = 是右结合之外,其它都是左结合:

x + y + z; // (x + y) + z
x = y = z; // x = (y = z)

() 可以调整 operators 的优先级和结合性。

class/struct 可以 override operators 和自定义 operators,见 这里

Operators

x?.y Conditional member access,x 是 null 时不访问 member。

a?[x] Conditional array and indexer access,a 是 null 时不访问元素。

x ?? y Null coalescing,x 是 null 时结果为 y。

| 操作数是 bool 时表示 ntegral types and bool

Console.WriteLine(true | false);  // logical or
Console.WriteLine(true || false); // conditional or
Console.WriteLine(true ?? false); // null coalescing