式ツリーで禁止されている式から生成されたエラーと警告を解決する

この記事では、次のコンパイラ エラーについて説明します。

  • CS0765 - 定義宣言だけを含む部分メソッドまたは削除された条件付きメソッドは、式ツリーで使用できません。
  • CS0831 - 式ツリーにベース アクセスを含めることはできません。
  • CS0832 - 式ツリーに代入演算子を含めることはできません
  • CS0834 - ステートメント本体を含むラムダ式は、式ツリーに変換できません。
  • CS0835 - ラムダ式を、型引数 'type' がデリゲート型ではない式ツリーに変換できません。
  • CS0838 - 式ツリーに多次元配列初期化子を含めることはできません。
  • CS0845 - 式ツリーのラムダには、左側に null リテラルまたは既定のリテラルのある合体演算子を含めることはできません。
  • CS0853 - 式ツリーに名前付き引数の指定を含めることはできません。
  • CS0854 - 式ツリーに、省略可能な引数を使用する呼び出しを含めることはできません。
  • CS0855 - 式ツリーにインデックス付きプロパティを含めることはできません。
  • CS1944 - 式ツリーに安全でないポインター操作を含めることはできません。
  • CS1945 - 式ツリーに匿名メソッド式を含めることはできません。
  • CS1946 - 匿名メソッド式を式のツリーに変換することはできません。
  • CS1951 - 式ツリー ラムダに、refin または 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 - 式ツリーにコレクション式を含めることはできません。

式ツリーの制限

上記の一覧のすべてのエラーは、式ツリーで許可されていない C# 式の型を使用したことを示しています。 ほとんどの場合、禁止されている式は C# 3.0 以降に導入された構文を表します。 これらの式を許可すると、式ツリーを解析するすべてのライブラリで破壊的変更が発生するため、これらは禁止されています。 より新しいコンストラクトが許可されている場合は、すべてのライブラリを拡張して新しい C# 式を解析する必要があります。

次の式は禁止されています。

その他の制限事項は次のとおりです。

  • ラムダ式、そのパラメーター、または戻り値に属性を適用することはできません。
  • ラムダ式は、型パラメーターがデリゲート型である System.Linq.Expressions.Expression から派生した型に変換できる必要があります。
  • 名前付きおよび省略可能なパラメーターは制限されます。 式では、名前付き引数を指定するメソッドを呼び出すことはできません。また、省略可能なパラメーターの既定値を使用することはできません。
  • 辞書初期化子は使用できません。 どちらも拡張 Add メソッドではありません。
  • ターゲット式はラムダ式である必要があります。 定数と変数は使用できませんが、定数または変数を返すラムダ式は許可されます。
  • 安全でないポインター操作は許可されません。
  • COM 呼び出しは引数に ref を含む必要があります。暗黙的に指定することはできません。
  • サポートされていない __arglist キーワードは許可されません。