0

ラムダ式を使用して匿名メソッドを定義する方法を理解するために、ラムダ式から始めています。

次の簡単なコードがあります。

delegate void AddNumber(int number);
class LambdaExpressionSample
{
   static void Main(string[] args)
   {
      AddNumber method = r => Console.WriteLine(r + r);Console.Read();
      method(1);
   }
}

私が望むのは、メソッドが次のようになることです:

AddNumber method = new AddNumber(delegate(int number) 
{ 
   Console.WriteLine(number+number); 
   Console.Read(); 
});

しかし、ラムダ式が明らかにセミコロン「;」で終わっているため、ラムダ式を含むコードは正しく機能していません。Console.WriteLine の後。

ラムダの例を使用してメソッドに Console.WriteLine と Console.Read を実行させるにはどうすればよいですか?

4

3 に答える 3

2

次のように、コードを中かっこで囲むだけです。

delegate void AddNumber(int number);
class LambdaExpressionSample
{
    static void Main(string[] args)
    {
        AddNumber method = r =>
        {
            Console.WriteLine(r + r);
            Console.Read();
        };
        method(1);
    }
}

は、単一のActionパラメーターを持ち、値を返さないメソッドをカプセル化します。したがって、コード内のあらゆる場所でカスタム デリゲートを使用してデリゲート地獄を回避するには、次を使用する必要があります。

Action<int> addNumber;

それ以外の:

delegate AddNumber(int number);

そして、変更を加えた新しいコードは次のとおりです。

class LambdaExpressionSample
{
    static Action<int> addNumber;
    static void Main(string[] args)
    {
        this.addNumber = r =>
        {
            Console.WriteLine(r + r);
            Console.Read();
        };
        this.addNumber(1);
    }
}
于 2012-08-03T08:24:21.330 に答える
1

複数のステートメントがある場合は、中括弧を使用する必要があります

AddNumber method = r => 
{
    Console.WriteLine(r + r);
    Console.Read();
};
于 2012-08-03T08:23:02.357 に答える
0

複数行のコードに中括弧を追加すると、問題が解決しました

AddNumber method = r => 
                 {
                       Console.WriteLine(r + r);
                       Console.Read();
                 };
于 2012-08-03T08:29:14.567 に答える