当您拨打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>>
来实现这种功能?
答案 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
重载。