Как я могу передать ссылку на функцию, которая требует переменную out? - PullRequest
5 голосов
/ 23 июля 2011
public class Foo
{
    public void DoFoo()
    {
       int x;
       var coll = TheFunc("bar", out x);
    }

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

Ошибка: "Аргумент 2 не должен передаваться с ключевым словом '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; }
}

Ошибка: "Недопустимый модификатор дисперсии. Только интерфейси параметры типа делегата могут быть указаны как вариант. "

Как получить параметр out в этой функции?

Ответы [ 2 ]

8 голосов
/ 23 июля 2011

Определить тип делегата:

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; }
}
7 голосов
/ 23 июля 2011

Вам нужно сделать свой собственный делегат:

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