1

C# の無名関数内の変数のスコープに疑問があります。

以下のプログラムを検討してください。

 delegate void OtherDel(int x);

        public static void Main()
        {
            OtherDel del2;
            {
                int y = 4;
                del2 = delegate
                {
                      Console.WriteLine("{0}", y);//Is y out of scope
                };
            }

           del2();
        }

私の VS2008 IDE は次のエラーを出します: [練習は名前空間練習内のクラスです]

1. エラー CS1643: すべてのコード パスが型 'Practice.Practice.OtherDel' の匿名メソッドで値を返すわけではありません 2. エラー CS1593: デリゲート 'OtherDel' は '0' 引数を取りません。

int 変数 y がdel2 定義のスコープ内にあることは、本で説明されています: Illustrated C# 2008(Page 373) 。次に、これらのエラーの理由。

4

2 に答える 2

4

2 つの問題。

  1. あなたはdel2()呼び出しに何も渡していませんが、それは ( )使用しないOtherDel整数を取ります- それでもそれを提供する必要があります (匿名メソッドでは、使用しない場合は暗黙のうちにパラメーターを宣言しないようにします -ただし、それらはまだ存在します-あなたの方法は本質的に同じです)del2 = delegate(int notUsed) {...}
  2. デリゲート ( OtherDel) は返さなければなりintません - あなたのメソッドはそうではありません

スコープは問題ありません。

于 2010-05-23T07:44:21.297 に答える
2

エラーはスコープとは関係ありません。デリゲートは整数値を返し、整数値をパラメーターとして受け取る必要があります。

del2 = someInt =>
{
    Console.WriteLine("{0}", y);
    return 17;
};
int result = del2(5);

したがって、コードは次のようになります。

delegate int OtherDel(int x);
public static void Main()
{
    int y = 4;
    OtherDel del = x =>
    {
        Console.WriteLine("{0}", x);
        return x;
    };
    int result = del(y);
}
于 2010-05-23T07:44:20.880 に答える