2011-07-22 9 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; } 
} 

Błąd: "Argumentu 2 nie należy przekazywać ze słowem kluczowym" out "."C# - Jak mogę przekazać odwołanie do funkcji, która wymaga zmiennej out?

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

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

Błąd: „Nieprawidłowy wariancji modyfikator tylko parametry typu interfejsu i pełnomocnik może być określony jako wariant”.

Jak uzyskać parametr out w tej funkcji?

+0

widzieć http://stackoverflow.com/questions/1365689/cannot-use-ref-or -out-parameter-in-lambda-expressions dla niektórych szczegółów – shelleybutterfly

+1

FYI tym bardziej ogólną zasadą jest to, że * argument typu musi być typem, który można przekształcić w obiekt *. "out int" nie jest wymienialne na obiekt; nie można przekonwertować "do zmiennej int" na obiekt. –

Odpowiedz

7

Musisz stworzyć własną delegat:

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

określić typ delegata:

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; } 
} 
Powiązane problemy