In hopes to better understand the order of operators in C# (6 & 7, but most will work for lower versions too), I decided to make a cheat sheet for myself in a table format. The list / section on the MSDN was helpful, but I wanted something a little more pleasing to my eyes… anyway, thought I’d share!
Example | Description |
Primary Operators | |
x.y | member access. |
x?.y | null conditional member access. Returns null if the left hand operand is null. |
f(x) | function invocation. |
a[x] | aggregate object indexing. |
a?[x] | null conditional indexing. Returns null if the left hand operand is null. |
x++ | postfix increment. Returns the value of x and then updates the storage location with the value of x that is one greater (typically adds the integer 1). |
x– | postfix decrement. Returns the value of x and then updates the storage location with the value of x that is one less (typically subtracts the integer 1). |
New | type instantiation. |
Typeof | returns the System.Type object representing the operand. |
Checked | enables overflow checking for integer operations. |
Unchecked | disables overflow checking for integer operations. This is the default compiler behavior. |
default(T) | returns the default initialized value of type T, null for reference types, zero for numeric types, and zero/null filled in members for struct types. |
Delegate | declares and returns a delegate instance |
Sizeof | returns the size in bytes of the type operand. |
-> | pointer dereferencing combined with member access. |
Unary Operators | |
+x | returns the value of x. |
-x | numeric negation. |
!x | logical negation. |
~x | bitwise complement. |
++x | prefix increment. Returns the value of x after updating the storage location with the value of x that is one greater (typically adds the integer 1). |
–x | prefix decrement. Returns the value of x after updating the storage location with the value of x that is one less (typically adds the integer 1). |
(T)x | type casting. |
Await | awaits a Task. |
&x | address of. |
*x | dereferencing. |
Multiplicative Operators | |
x * y | multiplication. |
x / y | division. If the operands are integers, the result is an integer truncated toward zero (for example, -7 / 2 is -3). |
x % y | modulus. If the operands are integers, this returns the remainder of dividing x by y. If q = x / y and r = x % y, then x = q * y + r. |
Additive Operators | |
x + y | addition. |
x – y | subtraction. |
Shift Operators | |
x << y | shift bits left and fill with zero on the right. |
x >> y | shift bits right. If the left operand is int or long, then left bits are filled with the sign bit. If the left operand is uint or ulong, then left bits are filled with zero. |
Relational and Type-testing Operators | |
x < y | less than (true if x is less than y). |
x > y | greater than (true if x is greater than y). |
x <= y | less than or equal to. |
x >= y | greater than or equal to. |
Is | type compatibility. Returns true if the evaluated left operand can be cast to the type specified in the right operand (a static type). |
As | type conversion. Returns the left operand cast to the type specified by the right operand (a static type), but as returns null where (T)x would throw an exception. |
Equality Operators | |
x == y | equality. By default, for reference types other than string, this returns reference equality (identity test). However, types can overload ==, so if your intent is to test identity, it is best to use the ReferenceEquals method on object. |
x != y | not equal. See comment for ==. If a type overloads ==, then it must overload !=. |
Logical Operators (In Order of Precedence) | |
x & y | logical or bitwise AND. Use with integer types and enum types is generally allowed. |
x ^ y | logical or bitwise XOR. You can generally use this with integer types and enum types. |
x | y | logical or bitwise OR. Use with integer types and enum types is generally allowed. |
Conditional Operators (In Order of Precedence) | |
x && y | logical AND. If the first operand is false, then C# does not evaluate the second operand. |
x || y | logical OR. If the first operand is true, then C# does not evaluate the second operand. |
Null-coalescing Operator | |
x ?? y | returns x if it is non-null; otherwise, returns y. |
Conditional Operator | |
t ? x : y | if test t is true, then evaluate and return x; otherwise, evaluate and return y. |
Assignment and Lambda Operators | |
x = y | assignment. |
x += y | increment. Add the value of y to the value of x, store the result in x, and return the new value. If x designates an event, then y must be an appropriate function that C# adds as an event handler. |
x -= y | decrement. Subtract the value of y from the value of x, store the result in x, and return the new value. If x designates an event, then y must be an appropriate function that C# removes as an event handler |
x *= y | multiplication assignment. Multiply the value of y to the value of x, store the result in x, and return the new value. |
x /= y | division assignment. Divide the value of x by the value of y, store the result in x, and return the new value. |
x %= y | modulus assignment. Divide the value of x by the value of y, store the remainder in x, and return the new value. |
x &= y | AND assignment. AND the value of y with the value of x, store the result in x, and return the new value. |
x |= y | OR assignment. OR the value of y with the value of x, store the result in x, and return the new value. |
x ^= y | XOR assignment. XOR the value of y with the value of x, store the result in x, and return the new value. |
x <<= y | left-shift assignment. Shift the value of x left by y places, store the result in x, and return the new value. |
x >>= y | right-shift assignment. Shift the value of x right by y places, store the result in x, and return the new value. |
=> | lambda declaration. |
Source: https://msdn.microsoft.com/en-us/library/6a71f45d.aspx