这个代码是什么:Func<;T、 字符串>;我没有;我不明白

本文关键字:字符串 gt 明白 是什么 代码 Func lt | 更新日期: 2023-09-27 18:22:22

我有一些代码(不是我写的)我不理解:

private Func<ControllerContext, string> ThemeSelector { get; set; }

所以这不是类型,这是Func<T、 string>我不知道这种东西是如何命名的,但我在谷歌上找不到一些解释。有人能给我一些解释吗?

谢谢。

这个代码是什么:Func<;T、 字符串>;我没有;我不明白

Func<ControllerContext, string>是泛型Func<T,K>的特定类型。你需要先了解泛型,然后才能完全理解它。

因此,ThemeSelector只是该类型的一个属性,它具有setter和getter。

Func类型是一个委托类型,它表示一个函数,该函数接受一个T类型的参数并返回一个K类型的实例。

这意味着您可以将任何此类函数分配给属性。例如:

private string MyFunction(ControllerContext context) {
    return "Hello world!";
}
...
ThemeSelector = MyFunction;
Console.WriteLine(ThemeSelector(null));

将在控制台中打印"Hello world!"。

这是一种委托类型,即这是一个属性,可以设置。它可以称为方法。

例如

/* 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();
}

这是一个类型!实际上它是委托类型。它表示一种可以在不显式声明委托的情况下使用的方法。

类型是泛型类型。示例中的一个类型为Func<T, TResult>,它表示一个方法,该方法有一个T类型的参数,并返回一个TResult类型的值。具体到您的示例,它表示一个具有ControllerContext参数并返回string值的方法:

string ThemeSelectorHandler(ControllerContext context) {
    returns context.ToString();
}

进一步阅读:

  • Func代表
  • .NET框架中的泛型

*委托是指向函数的指针
*Func是一种内置委托类型。尖括号中的最后一个类型是结果类型
*继承:对象->委托->函数
*Action是指向函数而不返回的内置委托。