概要
機能別索引&概要。 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 文」 | |
