1

別の質問に答えた質問がありましたが、なぜフォローがうまくいかないのですか? 私はこれを理解できません。コンパイラは次のように述べています。無名メソッドの do 文字列を変換できません。しかし、なぜ?

    public List<string> list = new List<string>();
    private void Form1_Load(object sender, EventArgs e)
    {    
        a.IterateObjects(B);
        // why this does not work:
        a.IterateObjects(delegate(string a) { listBox1.Items.Add(a); });
    }
    private void B(string a)
    {
        listBox1.Items.Add(a);
    }
    public void IterateObjects(Action<string> akce)
    {
        foreach (string a in list)
        {
            akce(a);
        }
    }
4

2 に答える 2

4

いくつかの変数の混乱があります。aはすでに別の場所で宣言されているため、次のように変更します。

a.IterateObjects(delegate(string a) { listBox1.Items.Add(a); }); 

に:

a.IterateObjects(delegate(string s) { listBox1.Items.Add(s); }); 

そしてそれはうまくいくはずです。

于 2010-03-11T13:13:07.403 に答える
0

ListBoxItemCollection.Add実際に整数を返すためだと思います。したがって、それはFunc<string, int>ではなく になりAction<string>ます。

編集:気にしないでください。delegateステートメントを使用していたので、それを-like オブジェクトreturnとして評価するために使用する必要があったと思います。Func

于 2010-03-11T13:15:54.997 に答える