2011-07-22 23 views
5
public class Foo 
{ 
    public void DoFoo() 
    { 
     int x; 
     var coll = TheFunc("bar", out x); 
    } 

    public Func<string, int, ICollection<string>> TheFunc { get; set; } 
} 

Error: "El argumento 2 no se debe pasar con la palabra clave 'out'."C# - ¿Cómo puedo pasar una referencia a una función que requiere una variable de salida?

public class Foo 
{ 
    public void DoFoo() 
    { 
     int x; 
     var coll = TheFunc("bar", out x); 
    } 

    public Func<string, out int, ICollection<string>> TheFunc { get; set; } 
} 

Error: "modificador de varianza no válida Sólo los parámetros de tipo de interfaz y delegadas se pueden especificar como variante."

¿Cómo obtengo un parámetro de salida en esta función?

+0

ver http://stackoverflow.com/questions/1365689/cannot-use-ref-or -out-parameter-in-lambda-expressions para algunos detalles – shelleybutterfly

+1

FYI la regla más general aquí es que * un argumento de tipo debe ser un tipo que sea convertible a objeto *. "out int" no es convertible a objeto; no puede convertir "referencia a una variable int" al objeto. –

Respuesta

7

Usted necesita para hacer su propio delegado:

delegate ICollection<string> MyFunc(string x, out int y); 
8

definir un tipo de delegado:

public delegate ICollection<string> FooDelegate(string a, out int b); 

public class Foo 
{ 
    public void DoFoo() 
    { 
     int x; 
     var coll = TheFunc("bar", out x); 
    } 

    public FooDelegate TheFunc { get; set; } 
} 
Cuestiones relacionadas