我可以有一个动作<>或者Func<>有一个外面的参数?

时间:2009-09-30 00:47:24

标签: c# delegates

我有一个带有out参数的方法,我想在其上指出ActionFunc(或其他类型的代表)。

这很好用:

static void Func(int a, int b) { }
Action<int,int> action = Func;

然而,这不是

static void OutFunc(out int a, out int b) { a = b = 0; }
Action<out int, out int> action = OutFunc; // loads of compile errors

这可能是重复的,但搜索'out参数'并不是特别富有成效。

2 个答案:

答案 0 :(得分:51)

Action和Func专门不取出或参数。但是,他们只是代表。

您可以创建一个自定义委托类型,该类型确实使用out参数,然后使用它。

例如,以下作品:

class Program
{
    static void OutFunc(out int a, out int b) { a = b = 0; }

    public delegate void OutAction<T1,T2>(out T1 a, out T2 b);

    static void Main(string[] args)
    {
        OutAction<int, int> action = OutFunc;
        int a = 3, b = 5;
        Console.WriteLine("{0}/{1}",a,b);
        action(out a, out b);
        Console.WriteLine("{0}/{1}", a, b);
        Console.ReadKey();
    }
}

打印出来:

3/5
0/0

答案 1 :(得分:2)

不,不是内置代表。 outref是特殊限定符,并且必须明确设置委托,因为它们是完全不同的调用样式。

但是,如果您定义了自己的委托,则可以执行以下操作:

delegate void OutAction<T1, T2>(out T1 a, out T2 b);