このトピックは、Syntax Parsing Engine によって処理されないセマンティック エラーについて説明します。
このトピックを理解するためには、以下のトピックを理解しておく必要があります。
Syntax Parsing Engine は、セマンティック エラーを認識できません。現在、こうしたエラーは、構文ツリーの構築後に開発者が見つける必要があります。以下は、セマンティック エラーの例です。
セマンティック エラーとは、文法的には正しいものの意味をなさない文章です。C# 言語のコンテキストにおける例では「int x = 12.3;」があります。-12.3 は整数リテラルではなく、12.3 から int への明示的な変換はありません。このためこのステートメントは意味をなしません。しかし文法的には間違っていません。C# 文法の定義に組み込まれている規則には従っています。
ここに、C# や VB といった言語でのセマンティック エラーの一般的な例をあげます。
型の不一致-C# では型の間違いが多くあります。上記の例は一方向です。ここにその他の起こりうる間違いを示します。
誤った型の値をメソッドに渡す
誤った型の値をメソッドに返す
誤った型の値をプロパティに設定する
誤った型の値をフィールドに設定する
誤った型の値をローカル変数に設定する
ジェネリック型の制約に一致しないジェネリック引数リストの型を利用する
Arity の不一致-何かしらに対して誤った数の引数を使用することを意味し、その方法は他にもたくさん存在する
誤った数の引数をメソッド呼び出しに渡す
誤ったインデックス数を配列またはインデクサーに渡す
ジェネリック型の誤った数の引数をジェネリック型またはメソッドに使用する
未定義名の利用-存在しない名前空間、型、メソッド、フィールド、変数またはプロパティ名を使用する
名前の競合-名前が競合する可能性がある
同じ名前空間内に同じ名前の異なる 2 つの型を定義する
同じクラス内に 2 つのメソッドを同じ引数リストおよび名前で定義する
同じ所有型の別のプロパティ、フィールドまたは入れ子にされた型と同じ名前を持つプロパティ、フィールドまたは入れ子にされた型を定義する
同じスコープ内または子孫スコープ内の 2 つのローカル変数を同じ名前で定義する
このトピックの追加情報については、以下のトピックも合わせてご参照ください。