概要
機能別索引&概要。 C# で使える式と文の一覧を先に示しておきます。
式
式: int x = ... とか f(...) の ... の部分に書けるもの。 x + y みたいな演算子適用が主。 その他、メンバー アクセスとかラムダ式とかクエリ式とか。
一覧(優先度順):
カテゴリー | 式 | 参考 |
---|---|---|
基本式 |
x.m
|
メンバー アクセス:「クラス」 |
x(…)
|
メソッド呼び出し:「関数」「デリゲート」 | |
x[…]
|
インデックス アクセス:「配列」「インデクサー」 | |
x?.m x?[...]
|
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 * y x / y x % y
|
「算術演算子」 |
加減算 |
x + y x – y
|
「算術演算子」 |
シフト |
x << y x >> y
|
「シフト」 |
関係式/型検査 |
x < y x > y x <= y x >= y
|
「関係演算」 |
x is T
|
「ダウンキャスト」 | |
x as T
|
「ダウンキャスト」 | |
等値比較 |
x == y x != 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 文」 |