是否有一个委托,它结合了Func <t>和Action <t>的功能?</t> </t>

时间:2011-03-03 15:28:56

标签: c# .net delegates

当您拨打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 个答案:

答案 0 :(得分:16)

您正在寻找Func<T, TResult>或其中一个15 other重载。

答案 1 :(得分:2)

Func<>次参数Func<TParam, TReturn>Func<TParam1, TParam2, TReturn>等等{{1}}重载。

答案 2 :(得分:2)

您可以使用new Func<inputType1, inputType2, inputType3, outputType>()执行此操作。这可以使用0到16个输入参数。您会在the System namespace中找到不同的Func重载。