我有一些我不理解的代码(不是我写的):
private Func<ControllerContext, string> ThemeSelector { get; set; }
所以这不是类型,这是 Func&lt; T,字符串&gt; ,我不知道这种事情是如何命名的,但我无法在Google上找到一些解释。有人可以给我一些解释,给我一个解释链接吗?
感谢。
答案 0 :(得分:3)
这是一个委托类型,即这是一个属性,可以设置。它可以称为方法。
例如
/* Action<String> is a delegate, get it as an object*/
public void Foo (String[] arr, Action<String> instruction) {
foreach (var element in arr) {
//use it as a method
instruction(element);
}
}
修改
同样适用于Func
// Func<Int32, Boolean> means that this is a function which accepts one argument as an integer and returns boolean.
public void Foo(Int32 data, Int32 otherData, Func<Int32, Boolean> instruction) {
var result1 = instruction(data);
var result2 = instruction(data2);
Console.WriteLine(result1==result2);
}
修改
更全面的例子。
//This methods accepts the third parameter as a function with 2 input arguments of type
// Int32 and return type String
public static void DoSomething(Int32 data1, Int32 data2, Func<Int32, Int32, String> whatToDo) {
var result = whatToDo(data1, data2);
Console.WriteLine(result);
}
public static Main(String[] args) {
// here we are calling the DoSomething and
// passing the Concat method as if it was an object.
DoSomething(1, 2, Concat);
// The same with multiply concat.
DoSomething(7, 2, MultiplyConcat);
}
public static String Concat(Int32 arg1, Int32 arg2) {
return arg1.ToString() + " " + arg2.ToString():
}
public static String MultiplyConcat(Int32 arg1, Int32 arg2) {
return (arg1 * arg2).ToString();
}
答案 1 :(得分:3)
Func<ControllerContext, string>
是通用Func<T,K>
的特定类型。
在完全理解之前,您需要首先了解泛型。
因此,ThemeSelector只是该类型的属性,具有setter和getter。
Func类型是一个委托类型,它表示一个函数,它接受一个类型为T的参数并返回一个类型为K的实例。
这意味着您可以将任何此类功能分配给该属性。 E.g:
private string MyFunction(ControllerContext context) {
return "Hello world!";
}
...
ThemeSelector = MyFunction;
Console.WriteLine(ThemeSelector(null));
将打印“Hello world!”在控制台中。
答案 2 :(得分:1)
这是一种类型!实际上它是委托类型。它表示可以在不明确声明委托的情况下使用的方法。
类型是泛型类型。示例中的类型为Func<T, TResult>
,表示具有一个类型为T的参数并返回TResult类型的值的方法。具体到您的示例,它表示具有ControllerContext
参数并返回string
值的方法:
string ThemeSelectorHandler(ControllerContext context) {
returns context.ToString();
}
进一步阅读:
答案 3 :(得分:0)
*委托是指向函数的指针。
* Func是内置委托类型。尖括号中的最后一个类型是结果类型。
*继承:对象->委托->函数
* Action是指向没有返回值的函数的内置委托。