1

(删除了不必要的混乱)

编辑 1

似乎我的问题不是很清楚...... doh...... :)

所以 ....

如何写这个:

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)
}
4

1 回答 1

1

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

任何一个:

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));

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

于 2012-04-05T19:39:20.273 回答