我有一个问题,我希望向委托添加函数调用,但每个函数调用都有一个唯一的参数。我无法弄清楚或在其他地方找到解决方案,所以我转向你们:)
下面一些伪..
(所以基本上,我正在创建一个委托和一个事件,并且 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)
不确定你真正想要什么,但你可以使用一个匿名函数来将这个额外的变量保存在其范围内:
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)