使用匿名方法中的ref或out参数调用方法

时间:2009-06-16 13:26:30

标签: c# .net

这个问题与one I asked the other day有关,我从中得到了一些很好的答案。

我需要以通用方式调用具有不同签名的各种Web方法。我希望能够将Web方法传递给具有委托参数的方法,但我不确定如何处理不同的签名。解决方案是使用lambdas(或匿名方法,因为我现在正在使用C#2)。

这很好用,直到我需要我的匿名方法来调用带有out参数的web方法。出于explained here的原因,您无法执行此操作。

所以我的问题是,除了创建一个没有引用的包装器方法或者从我的匿名方法调用params之外,是否有更简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:15)

实际上,你可以使用refout - 而不是直接使用调用方法的参数;但是,您可以在调用之前和之后复制值:

static void Foo(ref string s, out int i)
{
    string tmpS = s;
    int tmpI = 0; // for definite assignment
    DoIt(delegate { Bar(ref tmpS, out tmpI); });
    s = tmpS;
    i = tmpI;
}