C# 11新特性详解:插值字符串换行、列表模式与参数空值检查
C# 11 引入了多项提升开发体验的功能,包括允许内插字符串换行、新增列表模式匹配以及简化的参数空值检查。本文将逐一解析这些特性的语法与应用场景。
第1步:体验插值字符串中的自由换行
C# 6.0 引入了内插字符串(interpolated strings),其中非逐字字符串($"")通常不允许在文本中包含换行符,且这一限制曾延伸至插值表达式内部。这导致长表达式代码难以阅读。C# 11 移除了对插值表达式的换行限制,使多行格式化更加直观。
操作示例:在 C# 11 之前,以下写法会报错;在 C# 11 中,表达式可以随意换行而不影响编译。
var v = $"Count is\t: { this.Is.A.Really ()
.That.I.Should (
be + able)[
to.Wrap ()] }.";
完成判断:代码能够成功编译运行,且在表达式内部实现了视觉上的分行对齐。
第2步:使用列表模式简化数组匹配
列表模式(List Patterns)提供了一种声明式的方式来匹配集合或数组结构。它使用方括号 [] 表示序列,配合切片操作符 .. 可以捕获或忽略中间元素。
适用条件:类型需具有可访问的 Length 或 Count 属性,以及支持 int 或 System.Index 索引器的索引器。
操作示例:利用 switch 表达式进行结构匹配。
public static int CheckSwitch (int[] values)
=> values switch
{
[1, 2, .., 10] => 1, // 首尾固定,中间可变
[1, 2] => 2, // 精确长度匹配
[1, _] => 3, // 第二个元素任意但存在
[1, ..] => 4, // 以1开头,后跟任意数量元素
[..] => 50 // 任何非空数组
};
扩展用法:捕获切片内容。
public static string CaptureSlice (int[] values)
=> values switch
{
[1, .. var middle, _] => $"Middle {String.Join(", ", middle)}",
[.. var all] => $"All {String.Join(", ", all)}"
};
第3步:启用简化的参数空值检查
C# 11 引入了 !! 运算符,用于在方法参数定义处自动执行 null 检查并抛出 ArgumentNullException。
对比说明:
传统写法需要在方法体内编写样板代码:
public static void M (string s)
{
if (s is null)
throw new ArgumentNullException (nameof (s));
}
C# 11 极简写法:
public static void M (string s!!)
{
// Body of the method
}
注意:对于构造函数,该检查发生在字段初始化之前。此功能有助于减少样板代码并提升安全性。
如何配置环境以试用上述特性
要尝试 C# 11 的预览特性,需在项目中显式指定语言版本。打开项目配置文件 .csproj,修改 <PropertyGroup> 如下:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
保存文件并重新生成解决方案即可生效。
以上就是C# 11新特性预览:内插字符串换行、列表模式与参数空值检查的详细内容,更多关于C# 11入门的知识请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









