将参数传递给委托 c#

T1g*_*nC3 5 c# delegates

我有一个问题,我希望向委托添加函数调用,但每个函数调用都有一个唯一的参数。我无法弄清楚或在其他地方找到解决方案,所以我转向你们:)

下面一些伪..

(所以基本上,我正在创建一个委托和一个事件,并且 AddToDelegate 函数应该将函数调用添加到事件(具有唯一值),然后 GetData 函数返回一个字符串中的所有响应 -问题出在AddToDelegate 函数作为该行a += new A(SomeFunc)(i.ToString());实际上应该只是一个+= new A(SomeFunc);)

有没有办法与代表一起做到这一点 - 或者我是否在错误的树上咆哮?

public delegate string A(string s);
public event A a;

public void AddToDelegate()
{
    for (int i = 0; i < DelegateList.Length; i++)
    {
        a += new A(SomeFunc)(i.ToString());
    }
}

public string GetData()
{
    StringBuilder _sb = new StringBuilder();
    if (a != null)
    {
        Delegate[] DelegateList = a.GetInvocationList();
        for (int i = 0; i < DelegateList.Length; i++)
        {
            _sb.Append(((A)DelegateList[i]));
        }
    }
    return _sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

lin*_*ogl 3

不确定你真正想要什么,但你可以使用一个匿名函数来将这个额外的变量保存在其范围内:

a += new A( s => { 
    string extra_value = i.ToString();
    return SomeFunc(s, extra_value);
  });
Run Code Online (Sandbox Code Playgroud)

可以简化为:

a += s => SomeFunc(s, i.ToString());
Run Code Online (Sandbox Code Playgroud)