C# 10个常用特性汇总

1. 空合并运算符(null coalescing operator)

在C# 10中,空合并运算符(null coalescing operator)被引入,它可以简化处理可能为空的值的情况。通过使用??运算符,可以在变量为null时提供默认值。

string name = null;

string displayName = name ?? "Unknown";

在上面的例子中,如果name为空,displayName将被赋值为"Unknown"。这可以避免出现空引用异常。

这个特性在处理可空类型时特别有用,可以简化代码,并提高可读性。

2. 局部函数的参数null检查

在C# 10中,当在局部函数中使用参数时,编译器会自动为每个参数生成一个null检查。这意味着在局部函数内部可以放心地使用参数,而不需要手动进行null检查。

public void ProcessData(string data)

{

void LocalFunction(string input)

{

// 不需要手动进行null检查

Console.WriteLine(input.ToUpper());

}

// 自动进行null检查

LocalFunction(data);

}

这个特性简化了代码,并提高了代码的健壮性。

3. 外部声明(top-level statements)

在C# 10中,可以使用外部声明来简化程序的入口点的语法。不再需要繁琐的类和方法定义,可以直接编写顶级语句。

System.Console.WriteLine("Hello, World!");

这样,代码更加简洁,易于理解。

4. 扩展字段初始化

在C# 10中,可以使用扩展字段初始化来初始化对象的字段值,而不需要编写冗长重复的代码。

public class Person

{

public string Name { get; init; }

public int Age { get; init; }

}

// 扩展字段初始化

Person person = new()

{

Name = "John",

Age = 30

};

上述代码中,通过扩展字段初始化,可以直接在创建对象时为字段赋值,而不需要使用构造函数或属性。

5. 交错匹配(interpolated matching)

在C# 10中,可以使用交错匹配来简化模式匹配。

if (shape is Circle { Radius: var radius })

{

Console.WriteLine($"Circle with radius {radius}");

}

上述代码中,使用括号和冒号来指定模式匹配中的属性,并使用交错字符串来输出匹配的结果。

6. 数字分隔符

在C# 10中,可以使用数字分隔符来提高数字的可读性。

int million = 1_000_000;

上述代码中,使用下划线将数字分组,可以更容易地读懂大数字的值。

7. 可变using语句

在C# 10中,可以在using语句中使用var关键字来声明可变的范围变量。

using var stream = File.OpenRead("file.txt");

// 使用stream进行操作

上述代码中,使用var关键字可以让编译器推断出变量的类型,从而简化代码。

8. Lambda表达式中的ref参数

在C# 10中,可以使用Lambda表达式中的ref参数来修改传递给Lambda表达式的变量。

int value = 10;

Action<ref int> increment = (ref int x) => x++;

increment(ref value);

Console.WriteLine(value); // 输出11

以上代码中,通过使用ref参数,可以在Lambda表达式内部修改变量的值。

9. 类型推断增强

在C# 10中,类型推断得到了增强,编译器能够更准确地推断类型。

var text = "Hello, World!";

var number = 42;

以上代码中,编译器可以根据赋值语句自动推断出变量的类型,而无需显式指定。

10. 强制必需的字段初始化

在C# 10中,可以使用new modifier来强制字段的必需初始化。

public class Person

{

public string Name { get; init; }

public int Age { get; init; }

public int Height { get; init; }

public int! Weight; // 加上new modifier

}

以上代码中,通过使用new modifier,可以确保在对象创建时必须初始化Weight字段。

结论

本文介绍了C# 10中的10个常用特性,包括空合并运算符、局部函数的参数null检查、外部声明、扩展字段初始化、交错匹配、数字分隔符、可变using语句、Lambda表达式中的ref参数、类型推断增强和强制必需的字段初始化。这些特性使得代码更加简洁、易读,并提高了开发效率。

后端开发标签