我可以有一个动作<>或Func键<>用out PARAM?(Can I ha

2019-08-17 01:22发布

我有一个方法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

这可能是重复的,但搜索“输出参数”是不是特别富有成果。

Answer 1:

Action和Func键特别不拿出或ref参数。 然而,他们只是委托。

你可以说,的确需要一个输出参数,并使用它,虽然定制的委托类型。

例如,下面的工作:

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


Answer 2:

不,不是与内置的代表。 outref是特殊的预选赛和委托必须是建立与他们明确的,因为它们是完全不同的调用风格。

不过,如果你定义了自己的代表,你可以这样做:

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


文章来源: Can I have an Action<> or Func<> with an out param?
标签: c# delegates