首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何替换lambda委托

如何替换lambda委托
EN

Stack Overflow用户
提问于 2012-04-05 18:54:01
回答 1查看 305关注 0票数 1

(移除不必要的杂乱)

编辑1

看来我的问题不太清楚..。哈..。:)

所以..。

如何写这个:

代码语言:javascript
复制
instance.Method(e => OtherClass.Fill(e, instance2.A, instance3.B));

就像这样:

代码语言:javascript
复制
instance.Method(new Action<IDataReader>(OtherClass.Fill));

当“方法”签名为:

代码语言:javascript
复制
void Method(Action<IDataReader> reader)

“填写”签名是:

代码语言:javascript
复制
void Fill(IDataReader reader, string a, string b);

更新

我想出了一个替代实现,但它仍然会导致调试器介入那个填充调用。现在已经没有兰巴达符号了,但它似乎还在介入,啊……

代码语言:javascript
复制
instance.Method(delegate(IDataReader e) { OtherClass.Fill(e, instance2.A, instance3.B); });

溶液

似乎我只需要一个额外的方法,它是从委托调用的,然后该方法通过两个参数传递给下一个方法(Fill):

代码语言:javascript
复制
instance.Method(this.Foo);

[DebuggerStepThrough()]
private void Foo(IDataReader reader)
{
    OtherClass.Fill(reader, this.instance2.A, this.instance3.B)
}
EN

回答 1

Stack Overflow用户

发布于 2012-04-05 19:39:20

问题是,在某个地方,您的代码必须传递这些额外的参数,您的调试经验将遍历该过程。我能提供给您的最好的方法是将参数传递一点。

以下任一项:

代码语言:javascript
复制
Action<IDataReader> wrapper = reader => this.Fill(reader, instance2.A, instance3.B);
instance.Method(wrapper);

或者:

代码语言:javascript
复制
Func<Action<IDataReader, string, string>, Action<IDataReader>> reducer = arity3 => reader => arity3(reader, instance2.A, instance3.B);
instance.Method(reducer(this.Fill));

但是很明显,这两种解决方案仍然会让调试器“遍历”代码。如果不实际传递参数,就不能传递参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10034322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档