ホームページ > バックエンド開発 > C++ > C# で匿名メソッドを `var` に割り当てられないのはなぜですか?

C# で匿名メソッドを `var` に割り当てられないのはなぜですか?

Susan Sarandon
リリース: 2025-01-02 17:10:42
オリジナル
628 人が閲覧しました

Why Can't I Assign Anonymous Methods to `var` in C#?

var

への匿名メソッド代入の制限 C# では、匿名メソッドはインライン関数を定義する便利な方法を提供します。これらのメソッドはデリゲート型に簡単に割り当てることができますが、それらを (var を使用して) 暗黙的に型指定された変数に割り当てようとすると、コンパイラ エラーが発生することがよくあります。

次のコード サンプルを検討してください。

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};
ログイン後にコピー

匿名メソッドが明示的に Func に割り当てられているため、このコードは正常にコンパイルされます。代表者。ただし、次のコードではコンパイラ エラーが発生します:

var comparer = delegate(string value) {
    return value != "0";
};
ログイン後にコピー

エラー:

暗黙的に型指定されたローカル変数に匿名メソッドを割り当てることはできません。

このエラーは、コンパイラは匿名メソッドの型を推測できません。 Func、Predicate、Action、その他無数のデリゲート型を含む、表現できるデリゲート型は無限にあります。

さらに、コンパイラーが Func を推論した場合でも、意図したデリゲート型と同様に、匿名メソッドのパラメーター数が異なる場合と不整合が発生します。たとえば、次のコードも Func にコンパイルされます。 delegate:

var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
    return false;
};
ログイン後にコピー

ただし、これは意味がありません。 .NET 3.5 では、デリゲートは最大 4 つの引数のみをサポートします。

この問題を解決し、匿名メソッドが正しいデリゲート型にコンパイルされるようにするには、代入ステートメントでデリゲート型を明示的に指定する必要があります。最初のコードサンプルに見られるように。

以上がC# で匿名メソッドを `var` に割り当てられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート