概要
機能別索引&概要。 C# で使える式と文の一覧を先に示しておきます。
式
式: int x = ... とか f(...) の ... の部分に書けるもの。 x + y みたいな演算子適用が主。 その他、メンバー アクセスとかラムダ式とかクエリ式とか。
一覧(優先度順):
| カテゴリー | 式 | 参考 | 
|---|---|---|
| 基本式 | x.m | メンバー アクセス:「クラス」 | 
| x(…) | メソッド呼び出し:「関数」「デリゲート」 | |
| x[…] | インデックス アクセス:「配列」「インデクサー」 | |
| x?.mx?[...] | null 条件演算子:「null の取り扱い」 | |
| x++x-- | 「インクリメント・デクリメント」(後置き) | |
| x! | 「null 免除演算子」 | |
| new T(…)new T(…){…}new {…}new T[…] | オブジェクトの生成:「クラス」「コンストラクター」 | |
| typeof(T) | 「実行時型情報」型情報の取得 | |
| checked(x)unchecked(x) | 「オーバーフローのチェック」 | |
| default(T) | 「既定値」 | |
| delegate{…} | 「匿名関数」 | |
| nameof(x) | 「nameof演算子」 | |
| stackalloc T[...] | 「スタック上への配列の確保」、「安全な stackalloc」 | |
| p->m | ポインター アクセス:「unsafe」 | |
| sizeof(T) | 「unsafe」 | |
| 単項演算 | +x-x | 「算術演算子」 | 
| !x | 「論理演算子」 | |
| ~x | 「論理演算子」 | |
| ^x | 「Index」 | |
| ++x--x | 「インクリメント・デクリメント」(前置き) | |
| (T)x | 型変換(キャスト):「明示的な型変換」「ダウンキャスト」 | |
| await x | 非同期処理の完了待ち:「非同期処理」 | |
| x | true/false 式:「演算子のオーバーロード」 | |
| *p | ポインター間接参照:「unsafe」 | |
| &p | ポインター化:「unsafe」 | |
| 範囲 | x..y | 「Range」 | 
| switch 式 |  x switch { ...  } | 「switch 式」 | 
|  x with { ...  } | 「with 式」 | |
| 乗除算 |  x * yx / yx % y | 「算術演算子」 | 
| 加減算 | x + yx – y | 「算術演算子」 | 
| シフト | x << yx >> y | 「シフト」 | 
| 関係式/型検査 | x < yx > yx <= yx >= y | 「関係演算」 | 
| x is T | 「ダウンキャスト」 | |
| x as T | 「ダウンキャスト」 | |
| 等値比較 | x == yx != y | 「算術演算子」 | 
| 論理演算※1 | x & y | 「論理演算子」 | 
| x ^ y | 「論理演算子」 | |
| x | y | 「論理演算子」 | |
| 条件演算※1 | x && y | 「論理演算子」(短絡評価) | 
| x || y | 「論理演算子」(短絡評価) | |
| x ?? y | 「null 合体演算子」 | |
| throw x | 「throw 式」 | |
| x ? y : z | 「条件演算子」 | |
| クエリ式、 ラムダ式、 代入※2 | from x in … | 「クエリ式」 | 
| () => { } | 「匿名関数」「ラムダ式」 | |
| x = y | 「代入演算」 | |
| x op= y | += など:「代入演算」 | 
※1 論理演算と条件演算に関しては、同列の優先順位ではなく、上から順に優先度が付いています。
※2 クエリ式、ラムダ式、代入は同列で、例えば、以下のような C# コードを書けます。
int sum = 0;
Func<IEnumerable<int>> q = () =>
  from x in new[] { 1, 2, 3, 4, 5 }
  select sum += x;
結合規則
優先順位が同じ場合、クエリ式、ラムダ式、代入の3つは右から、その他の式は左から結合します。
左結合は、例えば、a + b + c + d なら ((a + b) + c) + d と同じ意味です。
右結合の例は Func<int> f = x => s += x; なら Func<int> f = (x => (s += x)); になります。
評価順
演算子のオペランドは、演算子の優先順位や結合規則によらず、常に左から順に評価されます。 例えば、以下のように、画面への出力を伴うメソッド Echo を呼ぶと、2, 3, 4 の順で出力されます。
using System;
class Program
{
    static int Echo(int x)
    {
        Console.WriteLine(x);
        return x;
    }
    static void Main()
    {
        var s = Echo(2) + Echo(3) * Echo(4);
        // 演算子の優先順位に関係なく、Echo(2) → Echo(3) → Echo(4) の順に呼ばれる
    }
}
2 3 4
文
一覧:
| カテゴリー | 文 | 例 | 参考 | 
|---|---|---|---|
| 宣言 | ローカル変数 | 
 | 「変数と式」 | 
| ローカル定数 | 
 | 「定数」 | |
| 式 | 
 | 式単体。 「式;」。「変数と式」「式」 | |
| オーバーフローのチェック | 
 | 「オーバーフローのチェック」 | |
| 条件分岐 | if 文 | 
 | 「制御フロー」「if 文」 | 
| switch 文 | 
 | 「switch 文」 | |
| 反復処理 | while 文 | 
 | 「制御フロー」「while 文」 | 
| do 文 | 
 | 「制御フロー」「do-while 文」 | |
| for 文 | 
 | 「制御フロー」「for 文」 | |
| foreach 文 | 
 | 「制御フロー」「foreach文」「foreach」 | |
| 反復の中断 | break 文 | 
 | 「反復処理」 | 
| continue 文 | 「反復処理」 | ||
| goto 文 | 
 | 「goto 文」 | |
| return 文 | 
 | 「関数」 | |
| yield 文 | 
 | 「イテレーター」 | |
| 例外処理 | 
 | 「例外処理」 | |
| リソース破棄 | 
 | 「リソースの破棄」 | |
| ロック | 
 | 「lock 文」 | |
