Есть ли делегат, который сочетает в себе функциональность Func <T>и Action <T>? - PullRequest
0 голосов
/ 03 марта 2011

Когда вы вызываете Action<T>, вы передаете переменную типа T, которая будет доступна для кода, определенного в делегате, например,

var myAction = new Action<string>(param =>
{
    Console.WriteLine("This is my param: '{0}'.", param);
});

myAction("Foo");

// Outputs: This is my param: 'Foo'.

И когда вы вызываете Func<T>, делегат возвращает переменную типа T, например,

var myFunc = new Func<string>(() =>
{
    return "Bar";
});

Console.WriteLine("This was returned from myFunc: '{0}'.", myFunc());

// Outputs: This was returned from myFunc: 'Bar'.

Вот вопрос -

Существует ли третий тип делегата, который будет принимать входной параметр, а также будет возвращать значение? Что-то вроде -

var fooDeletegate = new FooDelegate<string, int>(theInputInt =>
{
    return "The Answer to the Ultimate Question of Life, the Universe, and Everything is " + theInputInt;
});

Console.WriteLine(fooDeletegate(42));

// Outputs: The Answer to the Ultimate Question of Life, the Universe, and Everything is 42

Если такой вещи не существует, возможно ли использовать Action<Func<sting>> для такого рода функций?

Ответы [ 3 ]

16 голосов
/ 03 марта 2011

Вы ищете Func<T, TResult> или одну из Delegate"> 15 других перегрузок.

2 голосов
/ 03 марта 2011

вы можете сделать это с new Func<inputType1, inputType2, inputType3, outputType>(). Это возможно с 0 до 16 входных параметров. Вы найдете различные перегрузки Func в Пространстве имен системы .

2 голосов
/ 03 марта 2011

Имеются Func<> перегрузки с [больше нуля] параметрами Func<TParam, TReturn>, Func<TParam1, TParam2, TReturn> и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...