式ツリーで禁止されている式から生成されたエラーと警告を解決する
この記事では、次のコンパイラ エラーについて説明します。
- CS0765 - 定義宣言だけを含む部分メソッドまたは削除された条件付きメソッドは、式ツリーで使用できません。
- CS0831 - 式ツリーにベース アクセスを含めることはできません。
- CS0832 - 式ツリーに代入演算子を含めることはできません
- CS0834 - ステートメント本体を含むラムダ式は、式ツリーに変換できません。
- CS0835 - ラムダ式を、型引数 'type' がデリゲート型ではない式ツリーに変換できません。
- CS0838 - 式ツリーに多次元配列初期化子を含めることはできません。
- CS0845 - 式ツリーのラムダには、左側に null リテラルまたは既定のリテラルのある合体演算子を含めることはできません。
- CS0853 - 式ツリーに名前付き引数の指定を含めることはできません。
- CS0854 - 式ツリーに、省略可能な引数を使用する呼び出しを含めることはできません。
- CS0855 - 式ツリーにインデックス付きプロパティを含めることはできません。
- CS1944 - 式ツリーに安全でないポインター操作を含めることはできません。
- CS1945 - 式ツリーに匿名メソッド式を含めることはできません。
- CS1946 - 匿名メソッド式を式のツリーに変換することはできません。
- CS1951 - 式ツリー ラムダに、
ref
、in
またはout
パラメーターを含めることはできません。 - CS1952 - 式ツリーのラムダは、可変引数があるメソッドを含むことはできません。
- CS1963 - 式ツリーに動的な操作を含めることはできません。
- CS1989 - 非同期ラムダ式を式ツリーに変換することはできません。
- CS2037 - 式ツリーのラムダには、引数で ref を省略した COM 呼び出しを含めることはできません。
- CS7053 - 式ツリーに "feature" を含めることはできません。
- CS8072 - 式ツリーのラムダに null 伝搬演算子を含めることはできません。
- CS8074 - 式ツリーのラムダに辞書初期化子を含めることはできません。
- CS8075 - 拡張
Add
メソッドは、ラムダ式のコレクション初期化子ではサポートされていません。 - CS8110 - 式ツリーに、ローカル関数への参照を含めることはできません。
- CS8122 - 式ツリーに、'
is
' パターン マッチング演算子を含めることはできません。 - CS8143 - 式ツリーにタプル リテラルを含めることはできません。
- CS8144 - 式ツリーにタプル変換を含めることはできません。
- CS8153 - 式ツリーのラムダには、参照渡しで返すメソッド、プロパティ、インデクサーの呼び出しを含めることができません。
- CS8155 - 参照渡しで返すラムダ式は、式ツリーに変換できません。
- CS8188 - 式ツリーにスロー式を含めることはできません。
- CS8198 - 式のツリーに、出力引数の変数宣言を含めることはできません。
- CS8207 - 式ツリーに discard を含めることはできません。
- CS8382 - 式ツリーにタプルの
==
または!=
演算子を含めることはできません。 - CS8514 - 式ツリーに switch 式を含めることはできません。
- CS8640 - 式ツリーに、ref 構造体または制限がある型の値を含めることはできません。
- CS8642 - 式ツリーに null 合体代入を含めることはできません。
- CS8790 - 式ツリーに、パターン System.Index または System.Range インデクサー アクセスを含めることはできません。
- CS8791 - 式ツリーに、from-end インデックス ('
^
') 式を含めることはできません。 - CS8792 - 式ツリーに範囲 ('
..
') 式を含めることはできません。 - CS8810 - メソッド グループの '
&
' を式ツリーで使用することはできません。 - CS8849 - 式ツリーに
with
式を含めることはできません. - CS8927 - 式ツリーに、静的仮想または抽象インターフェイス メンバーのアクセス権を含めることはできません。
- CS8952 - 式ツリーに補間された文字列ハンドラー変換を含めることはできません。
- CS8972 - 属性を含むラムダ式は、式ツリーに変換できません。
- CS9170 - 式ツリーにインライン配列アクセスまたは変換を含めることはできません。
- CS9175 - 式ツリーにコレクション式を含めることはできません。
- CS9226 - 式ツリーには、配列以外のパラメーターのコレクション パラメーターの展開されたフォームは含まれない場合があります。
式ツリーの制限
上記の一覧のすべてのエラーは、式ツリーで許可されていない C# 式の型を使用したことを示しています。 ほとんどの場合、禁止されている式は C# 3.0 以降に導入された構文を表します。 これらの式を許可すると、式ツリーを解析するすべてのライブラリで破壊的変更が発生するため、これらは禁止されています。 より新しいコンストラクトが許可されている場合は、すべてのライブラリを拡張して新しい C# 式を解析する必要があります。
次の式は禁止されています。
- 実装宣言がない部分メソッドの呼び出し。
- 削除された条件付きメソッドの呼び出し。
- ローカル関数の呼び出し。
async
ラムダ式は使用できません。base
アクセスを使用して、基底クラスで宣言された仮想メソッドを直接呼び出す。- 割り当て操作。
- ステートメントのラムダは許可されません。
- 多次元配列初期化子。 代わりに、式ツリーの外部で多次元配列を作成して初期化する必要があります。
dynamic
操作は許可されません。- パターン マッチング式は許可されません。
- タプル リテラルと多くのタプル操作 (等価比較など) は許可されません。
throw
式は許可されません。- discard (
_
) 宣言。 - インデックスと範囲演算子は許可されません。
with
式を使用した非破壊的な変化は許可されません。- インライン配列の宣言やアクセスを行うことはできません。
- コレクション式を含めることはできません。
- null 伝搬と null 合体演算子は許可されません。
- System.Span<T> や System.ReadOnlySpan<T> などの
ref struct
型は許可されません。 out
変数宣言を含む、in
、out
、およびref
パラメーターは許可されません。ref
戻り値は許可されません。ref
で返されるメソッドの呼び出しは許可されません。- 静的抽象インターフェイス メンバーにはアクセスできません。
- インライン配列。
params
修飾子は、1 次元配列でのみ許可されます。 他のコレクション型は許可されません。
その他の制限事項は次のとおりです。
- ラムダ式、そのパラメーター、または戻り値に属性を適用することはできません。
- ラムダ式は、型パラメーターがデリゲート型である System.Linq.Expressions.Expression から派生した型に変換できる必要があります。
- 名前付きおよび省略可能なパラメーターは制限されます。 式では、名前付き引数を指定するメソッドを呼び出すことはできません。また、省略可能なパラメーターの既定値を使用することはできません。
- 辞書初期化子は使用できません。 どちらも拡張
Add
メソッドではありません。 - ターゲット式はラムダ式である必要があります。 定数と変数は使用できませんが、定数または変数を返すラムダ式は許可されます。
- 安全でないポインター操作は許可されません。
- COM 呼び出しは引数に
ref
を含む必要があります。暗黙的に指定することはできません。 - サポートされていない
__arglist
キーワードは許可されません。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET