1

なぜ私はこれを持てないのですか?つまり、デリゲート宣言を惜しまないということです。

int X=delegate int(){...};

私はそれがこのようにできることを知っています:

delegate int IntDelegate();
...
IntDelegate del=delegate(){return 25;};
int X=del();
4

4 に答える 4

5

デリゲートは int ではありません。

.Net 3.5 以降を使用する場合、カスタムを使用する代わりに組み込みの Func を使用できます (文字列にタグを付けて int を返す Func のような引数が必要な場合、Func にはジェネリック型もあります)。

Func<int> X = delegate() { return 255; };

またはラムダ式で:

Func<int> X = () => 255;

残念ながら、次のことは言えません。

var X2 = () => 255;

C# で使用できますが、F# などの関数型言語でも同様のことができます。代わりに、C# では次のように記述します。

var X2 = new Func<int>(() => 255);
于 2010-07-26T13:05:54.593 に答える
2

トーマス、

これはあなたのために働くでしょうか:

    delegate int IntDelegate();
    // other stuff...
    IntDelegate _del = () => 25;

ジム

[編集] - おっと、今気づきました、問題はそれをワンライナーにすることでした!! - 考えてみます

于 2010-07-26T13:03:54.810 に答える
2

最初の例では、デリゲートの出力を int に割り当てるのではなく、デリゲート型を int に割り当てようとしているためです。デリゲートは関数を格納する型であり、目的の値をたまたま返します。

于 2010-07-26T13:04:21.350 に答える
2

デリゲートを作成して実行し、値を返す必要は本当にあるのでしょうか? コードを直接実行しないのはなぜですか?

int x = new Func<int,int>(num => num*num) (3);

9 を返しますが、次のようになります。

int x = 3*3;
于 2010-07-26T13:13:48.683 に答える