2010-03-11 76 views
4

在下面我通過方法B中作爲操作的代碼在所述IterateObjects方法的對象被perfomed上。 我想問一下我是否能明確聲明該方法的參數,而不是按名稱傳遞它,像這樣的:
a.IterateObjects(delegate void(string s){//method body})它不是正確的,但我相信,我已經看到了類似的東西的工作。您能否提一些建議?謝謝- C#,申報參數(委託)方法

DelTest a = new DelTest(); //class with method IterateObjects 
a.IterateObjects(B) //HERE 

private void B(string a) 
{ 
    listBox1.Items.Add(a); 
} 

//another class .... 

public void IterateObjects(Action<string> akce) 
{ 
    foreach(string a in list) 
    { 
     akce(a); 
    } 
} 

回答

1
delegate void MyFunctionDelegate(string a); 

    public void Main() 
    { 
     iterateObjects (delegate(string a){/*do something*/}); 
    } 

    public void IterateObjects(MyFunctionDelegate akce) 
    { 
     foreach(string a in list) 
     { 
      akce(a); 
     } 
    } 

http://msdn.microsoft.com/en-us/library/900fyy8e%28VS.80%29.aspx

就是這樣:)

+0

是的,這是做它在C#2 –

+0

哼的方式,但它爲什麼不適用於Action ?該IterateObjects是在不同的類,所以我想用行動作爲參數傳遞給路過這裏 – Petr

+0

你可以宣佈你的操作是這樣的:IterateObjects(新行動(委託(字符串){/ *做某事* /})); –

3

是的,你可以使用lambda像這樣:

a.IterateObjects (x => listBox1.Items.Add(x)); 
0

您可以使用lambda表達式:

a.IterateObjects((string s) => listBox1.Items.Add(s))