3

私は次のようなデリゲートを定義しました:

   delegate void processRecord(int a, int b);

今、私はそれを使用して、関数呼び出しで提供する匿名のメソッドを作成したいと思います。関数は次のように定義されます。

   void someFunction(processRecord fcn);

匿名のメソッドで呼び出したいのですsomeFunctionが、これは正しく理解できません。

   someFunction(new processRecord(a, b) {
       // do stuff
   });

このようなものの正しい構文はどうですか?

4

5 に答える 5

6

processRecordパラメータを使用してメソッドの呼び出しを宣言する正しい構文は次のとおりです。

someFunction(delegate (int a, int b) {
    // use a and b here
});

次のようにと互換性があるsomeFunctionため、を呼び出すラムダ構文を利用できます。processRecordAction<int,int>

someFunction((a, x) => Console.WriteLine(a + "; " + x));

しかし、.net フレームワークでは、独自のデリゲートを作成する代わりに使用できる汎用デリゲートActionが既に存在します。.NET 3.5

代わりに、関数を次のように定義するだけです。

void someFunction(Action<int, int> fcn) {}

それから電話する

someFunction( (a,b) => /*use a and b here*/ );
于 2013-01-10T15:50:43.810 に答える
1

次のように呼び出すことができます。

someFunction(delegate( int a, int b) {
   // do stuff
});

C# コンパイラはdelegate processRecord、呼び出しのコンテキストから作成していることを認識します。

于 2013-01-10T15:50:37.733 に答える
1

でdeletegateを使用する場合に使用できます someFunction

   someFunction(delegate( int a, int b) {
       // do some stuff
    });

ここに がありDEMOます。

于 2013-01-10T15:51:39.450 に答える
0

以下にいくつかのオプションを示しますが、これらはすべて実質的に同じことを行います。

someFunction((a,b) => DoStuff());

someFunction(delegate(int a, int b){ doStuff(); });

someFunction(new processRecord((int a, int b) => 
{
    doStuff(); doMoreStuff(); 
}));
于 2013-01-10T15:51:31.343 に答える
0
processRecord t = (q,w) =>
        {
            int n = q+w;
        };
        someFunction(t);
于 2013-01-10T15:52:27.317 に答える