About Operators
Precedence
The following expression:1 + 2 * 3
Left-associative operators
Binary operators (except for assignment, lambda, and null coalescing operators) are left-associative, in other words, they are evaluated from left to right. For example, the following expression:8 / 4 / 2
Right-associative operators
The assignment operators, lambda, null coalescing, and conditional operator are right-associative; in other words, they are evaluated from right to left. Right associativity allows multiple assignments such as the following to compile:x = y = 3;
Operators
Following table shows you list of operator supported by C# in order of precedence
| Category | Operator symbol | Operator name | Example | User-overloadable |
|---|---|---|---|---|
| Primary | . | Member access | x.y | No |
| -> | (unsafe) Pointer to struct | x->y | No | |
| () | Function call | x() | No | |
| [] | Array/index | a[x] | Via indexer | |
| ++ | Post-increment | x++ | Yes | |
| -- | Post-decrement | x-- | Yes | |
| new | Create instance | new Foo() | No | |
| stackalloc | Unsafe stack allocation | stackalloc(10) | No | |
| typeof | Get type from identifier | typeof(int) | No | |
| checked | Integral overflow check on | checked(x) | No | |
| unchecked | Integral overflow check off | unchecked(x) | No | |
| default | Default value | default(char) | No | |
| await | Await async | await myTask | No | |
| Unary | sizeof | Get size of struct | sizeof(int) | No |
| + | Positive value of | +x | Yes | |
| - | Negative value of | -x | Yes | |
| ! | Not | !x | Yes | |
| - | Bitwise complement | -x | Yes | |
| ++ | Pre-increment | ++x | Yes | |
| -- | Pre-decrement | --x | Yes | |
| () | Cast | (int)x | No | |
| * | (unsafe) Value at address | *x | No | |
| & | (unsafe) Address of value | &x | No | |
| Multiplicative | * | Multiply | x * y | Yes |
| / | Divide | x / y | Yes | |
| % | Remainder | x % y | Yes | |
| Additive | + | Add | x + y | Yes |
| - | Subtract | x - y | Yes | |
| Shift | << | Shift left | x >> 1 | Yes |
| >> | Shift right | x << 1 | Yes | |
| Relational | < | Less than | x < y | Yes |
| > | Greater than | x > y | Yes | |
| <= | Less than or equal to | x <= y | Yes | |
| >= | Greater than or equal to | x >= y | Yes | |
| is | is Type or is subclass of | x is y | No | |
| as | Type conversion | x as y | No | |
| Equality | == | Equals | x == y | Yes |
| != | Not equals | x != y | Yes | |
| Logical And | & | Logical And | x & y | Yes |
| Logical Xor | ^ | Exclusive Or | x ^ y | Yes |
| Logical Or | | | Logical Or | x | y | Yes |
| Conditional And | && | Conditional And | x && y | Via & |
| Conditional Or | || | Conditional Or | x || y | Via | |
| Null coalescing | ?? | Null coalescing | x ?? y | No |
| Conditional | ?: | Conditional | isTrue ? value : otherValue | No |
| Assignment & Lambda | = | Assign | x = y | No |
| *= | Multiply self by | x *= 2 | Via * | |
| /= | Divide self by | x /= 2 | Via / | |
| += | Add to self | x += 2 | Via + | |
| -= | Subtract from self | x -= 2 | Via - | |
| <<= | Shift self left by | x <<= 2 | Via << | |
| >>= | Shift self right by | x >>= 2 | Via >> | |
| &= | And self by | x &= 2 | Via & | |
| ^= | Exclusive-Or self by | x ^= 2 | Via ^ | |
| |= | Or self by | x |= 2 | Via | | |
| => | Lambda | x => x + 1 | No |
0 comments:
Post a Comment