2009-09-30 5 views
31

J'ai une méthode avec un paramètre out, et je voudrais pointer un Action ou Func (ou un autre type de délégué).Puis-je avoir une Action <> ou Func <> avec un paramètre out?

Cela fonctionne très bien:

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

Toutefois, cela ne

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

Ceci est probablement un double, mais la recherche de 'paramètre out' est pas particulièrement fructueuse.

+0

double possible de [Func avec le paramètre out] (http://stackoverflow.com/questions/1283127/funct-with -out-parameter) – nawfal

Répondre

47

Action et Func ne suppriment pas ou ne modifient pas les paramètres. Cependant, ils ne sont que des délégués.

Vous pouvez créer un type de délégué personnalisé qui prend un paramètre out et l'utiliser, cependant.

Par exemple, les travaux suivants:

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

Cette imprime:

3/5 
0/0 
+0

Dans l'exemple ci-dessus, le type 'OutAction ' est imbriqué dans le type 'Program'. C'est parfaitement bien. Mais il est également possible d'avoir un type de délégué non imbriqué, c'est-à-dire que OutAction pourrait être un membre direct de l'espace de nommage. –

2

Non, pas avec les délégués builtin. out et ref sont des qualificatifs spéciaux et le délégué doit être configuré avec eux explicitement car ils sont complètement différents styles d'appel.

Cependant, si vous avez défini votre propre délégué, vous pouvez le faire:

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