C# 如何替换lambda委托

C# 如何替换lambda委托,c#,delegates,lambda,C#,Delegates,Lambda,(消除了不必要的混乱) 编辑1 看来我的问题不是很清楚。。。doh…:) 所以 如何写这个: instance.Method(e => OtherClass.Fill(e, instance2.A, instance3.B)); 比如说: instance.Method(new Action<IDataReader>(OtherClass.Fill)); 更新 我想出了一个替代实现,但它仍然会导致调试器介入到这个填充调用中。不再有lambda符号,但它似乎仍在介入,啊 in

(消除了不必要的混乱)

编辑1

看来我的问题不是很清楚。。。doh…:)

所以

如何写这个:

instance.Method(e => OtherClass.Fill(e, instance2.A, instance3.B));
比如说:

instance.Method(new Action<IDataReader>(OtherClass.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);
Action wrapper=reader=>this.Fill(reader,instance2.A,instance3.B);
方法(包装器);
或:

Func reducer=arity3=>reader=>arity3(reader,instance2.A,instance3.B);
方法(reducer(this.Fill));

但显然,无论哪种解决方案,调试器都会对代码进行“遍历”。如果不实际传递参数,就不能传递参数。

问题是,代码必须在某个地方传递这些额外的参数,调试经验将贯穿整个过程。我所能提供给您的最好方法是将参数稍微包装一下

要么:

Action<IDataReader> wrapper = reader => this.Fill(reader, instance2.A, instance3.B);
instance.Method(wrapper);
Action wrapper=reader=>this.Fill(reader,instance2.A,instance3.B);
方法(包装器);
或:

Func reducer=arity3=>reader=>arity3(reader,instance2.A,instance3.B);
方法(reducer(this.Fill));

但显然,无论哪种解决方案,调试器都会对代码进行“遍历”。如果不实际传递参数,则无法传递参数。

您必须以某种方式定义额外的参数,为什么不能使用您给出的解决方案:instance.Method(e=>this.Fill(e,instance2.A,instance3.B));?当然,我可以使用它,但我不想摆脱调试器在使用F11单步执行时将单步执行lambda调用。调试代码非常烦人,而且总是要进行lambda调用。。。因为我可以使用lambda表示法来编写它,所以我应该能够在没有lambda的情况下编写它;)@哈扎然后点击F10,它会越过它。没有帮助,因为在这一点上,我已经结束了lambda呼叫。若lambda是从循环中调用的,则按F10也将从循环中跳出。代码非常“大”,我不“明白”我以什么方式结束这个委托,所以我不能只想“好,点击F10,因为下一个是lambda调用”Doh,很抱歉错误的评论,在lambda中点击F10不会跳出循环(测试)。这里的问题仍然是,我已经得到了那个lambda,我试图摆脱它。你必须以某种方式定义额外的参数,为什么不能使用你给出的解决方案:instance.Method(e=>this.Fill(e,instance2.A,instance3.B));?当然,我可以使用它,但我不想摆脱调试器在使用F11单步执行时将单步执行lambda调用。调试代码非常烦人,而且总是要进行lambda调用。。。因为我可以使用lambda表示法来编写它,所以我应该能够在没有lambda的情况下编写它;)@哈扎然后点击F10,它会越过它。没有帮助,因为在这一点上,我已经结束了lambda呼叫。若lambda是从循环中调用的,则按F10也将从循环中跳出。代码非常“大”,我不“明白”我以什么方式结束这个委托,所以我不能只想“好,点击F10,因为下一个是lambda调用”Doh,很抱歉错误的评论,在lambda中点击F10不会跳出循环(测试)。这里的问题仍然是,我已经结束了对lambda无论如何,我试图摆脱它。请检查我的更新。我还计划了某种“包装器”,但仍然存在导致调试器介入的lambda符号,因此没有帮助……是的,如果没有实际传递参数的代码,就无法将参数传递给Fill方法。你希望这个“事件”发生在哪里?我只是通过一个额外的方法解决了这个问题。就这么简单。我只是试着把所有的东西都放在一行代码中:)请检查我的更新。我还计划了某种“包装器”,但仍然存在导致调试器介入的lambda符号,因此没有帮助……是的,如果没有实际传递参数的代码,就无法将参数传递给Fill方法。你希望这个“事件”发生在哪里?我只是通过一个额外的方法解决了这个问题。就这么简单。我只是试着把所有东西都放在一行代码中:)
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));