如何替换 lambda 委托
本文关键字:lambda 委托 替换 何替换 | 更新日期: 2023-09-27 18:30:23
(删除了不必要的混乱)
编辑 1
看来我的问题不是很清楚...哎...... :)
所以。。。。
怎么写:
instance.Method(e => OtherClass.Fill(e, instance2.A, instance3.B));
像这样:
instance.Method(new Action<IDataReader>(OtherClass.Fill));
当"方法"签名为:
void Method(Action<IDataReader> reader)
而"填写"签名为:
void Fill(IDataReader reader, string a, string b);
更新
我想出了一个替代实现,但它仍然会导致调试器单步执行该 Fill 调用。不再有lambda符号,但它似乎仍然介入,哎呀...
instance.Method(delegate(IDataReader e) { OtherClass.Fill(e, instance2.A, instance3.B); });
溶液
似乎我只需要一个从委托调用的附加方法,然后该方法将调用传递给下一个方法(Fill),其中包含另外两个参数:
instance.Method(this.Foo);
[DebuggerStepThrough()]
private void Foo(IDataReader reader)
{
OtherClass.Fill(reader, this.instance2.A, this.instance3.B)
}
问题是,您的代码必须在某个地方传递这些额外的参数,并且您的调试体验将遍历该过程。我能为您提供的最好的方法是稍微包装参数传递。
也:
Action<IDataReader> wrapper = reader => this.Fill(reader, instance2.A, instance3.B);
instance.Method(wrapper);
或:
Func<Action<IDataReader, string, string>, Action<IDataReader>> reducer = arity3 => reader => arity3(reader, instance2.A, instance3.B);
instance.Method(reducer(this.Fill));
但显然,这两种解决方案仍然会让调试器"遍历"代码。如果不实际传递参数,则无法传递参数。