静态匿名函数
在 C#9.0 中,引入了一种新的静态匿名函数的语法,它可以让开发者更加方便地定义和使用匿名函数。
# 定义静态匿名函数
静态匿名函数使用 static
关键字来定义,语法如下:
static returnType FunctionName(parameterList) {
// 函数体
}
其中 returnType
表示函数返回值的类型,FunctionName
表示函数的名称,可以省略,parameterList
表示函数参数列表,可以省略,函数体中可以包含任意语句和表达式。
例如,下面的代码定义了一个静态匿名函数 doubleIt
,它将输入参数乘以 2 并返回:
static int doubleIt(int x) {
return x * 2;
}
# 使用静态匿名函数
静态匿名函数可以像普通函数一样调用,例如:
int result = doubleIt(5);
静态匿名函数也可以作为委托类型的值来使用,例如:
Func<int, int> doubleItDelegate = static x => x * 2;
int result = doubleItDelegate(5);
在这个例子中,我们定义了一个 Func<int, int>
类型的委托变量 doubleItDelegate
,它的参数和返回值都是 int
类型,然后将一个静态匿名函数作为它的值来初始化。这个静态匿名函数的实现和之前的例子一样,将输入参数乘以 2 并返回。
# 静态匿名函数的特点
静态匿名函数和普通匿名函数一样,它们没有名称,并且不能访问外部变量(即它们的闭包为空)。但是静态匿名函数和普通匿名函数不同的是,静态匿名函数可以访问外部类型的静态成员,例如:
class MyClass {
static int multiplier = 2;
static int doubleIt(int x) {
return x * multiplier;
}
}
在这个例子中,我们定义了一个静态成员变量 multiplier
,然后在静态匿名函数中访问了它。
静态匿名函数还可以用来作为泛型类型的参数,例如:
List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };
var result = numbers.Select(static x => x * 2).ToList();
在这个例子中,我们使用 LINQ 中的 Select
方法对列表中的元素进行映射,将每个元素乘以 2。这里使用了一个静态匿名函数作为 Select
方法的参数。
# 总结
C#9.0 中引入了静态匿名函数的语法,它可以让开发者更加方便地定义和使用匿名函数。静态匿名函数使用 static
关键字来定义,可以像普通函数一样调用,也可以作为委托类型的值来使用。静态匿名函数和普通匿名函数一样,它们没有名称,并且不能访问外部变量,但是静态匿名函数可以访问外部类型的静态成员,并且可以用来作为泛型类型的参数。静态匿名函数的引入让 C# 的函数式编程能力更加强大,也让 C# 的语法更加灵活和简洁。