外贸网站建设行业发展,wordpress开发优势,asp.net 网站建设,网站百度v认证文 | 罗奇奇出品 | OSC开源社区#xff08;ID#xff1a;oschina2013#xff09;.NET 首席项目经理凯瑟琳在博客中介绍了 C# 11 的一些预览性新功能#xff0c;这些功能可以在 Visual Studio 17.1 和 .NET SDK 6.0.200 中体验#xff0c;下面摘录一部分新特性作介绍#… 文 | 罗奇奇出品 | OSC开源社区IDoschina2013.NET 首席项目经理凯瑟琳在博客中介绍了 C# 11 的一些预览性新功能这些功能可以在 Visual Studio 17.1 和 .NET SDK 6.0.200 中体验下面摘录一部分新特性作介绍C# 11 预览允许在内插字符串的“插值表达式”中换行内插字符串interpolated strings是 C# 6.0 引入的语法它允许在字符串中插入表达式。C# 的内插字符串分为非逐字和逐字内插字符串分别是 $ 和 $两种。两者最大的区别是非逐字内插字符串与普通字符串一样不能在字符串文本中包含换行符必须使用转义符如\r 、\n。相反逐字插值字符串可以在其文本段中包含换行符并且不会转义换行符或其他字符。但是非逐字插值字符串中的“换行符限制”从字符串文本扩散到了文本之外的 插值表达式 这导致了很多不必要的限制。比如在 C# 11 之前下面这段代码编译起来会报错var v $Count is\t: { this.Is.A.Really().That.I.Should(be able)[to.Wrap()] }.;但在 C# 11 预览版中它是合法的可以正常编译。关于该新特性的详细讨论可查看 GitHub Issue #4935https://github.com/dotnet/csharplang/issues/4935。 C# 11 预览列表模式新的 列表模式 允许将数组或列表与一系列模式匹配例如 array is [1, 2, 3] 将匹配长度为 3 的整数数组其元素分别为 1、2、3。除了允许匹配列表和数组还可以匹配元素且可以选择包含零个或多个元素的切片模式。使用切片模式可以丢弃或捕获零个或多个元素。列表模式的语法是用方括号括起来的值切片模式的语法是两个点 ..。切片模式后面可以跟着另一个列表模式比如 var 模式来捕获切片内容。比如该模式匹配以下所有内容[1, 2, .., 10]int[] arr1 { 1, 2, 10 };
int[] arr1 { 1, 2, 5, 10 };
int[] arr1 { 1, 2, 5, 6, 7, 8, 9, 10 };要探索列表模式请参考public static int CheckSwitch(int[] values) values switch{[1, 2, .., 10] 1,[1, 2] 2,[1, _] 3,[1, ..] 4,[..] 50};当它传递以下数组时结果如下所示WriteLine(CheckSwitch(new[] { 1, 2, 10 })); // prints 1
WriteLine(CheckSwitch(new[] { 1, 2, 7, 3, 3, 10 })); // prints 1
WriteLine(CheckSwitch(new[] { 1, 2 })); // prints 2
WriteLine(CheckSwitch(new[] { 1, 3 })); // prints 3
WriteLine(CheckSwitch(new[] { 1, 3, 5 })); // prints 4
WriteLine(CheckSwitch(new[] { 2, 5, 6, 7 })); // prints 50还可以捕获切片模式的结果public static string CaptureSlice(int[] values) values switch{[1, .. var middle, _] $Middle {String.Join(, , middle)},[.. var all] $All {String.Join(, , all)}};列表模式适用于任何可计数和可索引的类型 —— 这意味着它有一个可访问的 Length 或 Count 属性以及一个带 int 或 System.Index 形参的索引器。切片模式适用于任何可计数和可切片的类型 —— 这意味着它有一个以 Range 为实参的可访问索引器或者具有两个 int 形参的可访问 Slice 方法。目前正在考虑在 IEnumerable 类型上添加对列表模式的支持点此查看https://github.com/dotnet/csharplang/blob/main/proposals/list-patterns.md关于该列表模式的详细介绍。C# 11 预览新的参数空值检查C# 11 提供了一种简化的语法用于验证方法的参数不是 null 以及正确抛出 ArgumentNullException。以前可以使用样板代码的变体来验证方法参数是否为空public static void M(string s)
{if (s is null){throw new ArgumentNullException(nameof(s));}// Body of the method
}使用新的参数 null 检查可以通过添加 !! 到参数名自动执行空值检查public static void M(string s!!)
{// Body of the method
}自动生成的空值检查代码将在方法主体的代码之前执行。对于构造器该空值检查发生在字段初始化、调用 base 构造函数和调用 this 构造函数之前。有关该新的参数空值检查可在此查看https://github.com/dotnet/csharplang/blob/main/proposals/param-nullchecking.md详细介绍。如何尝试预览特性若要尝试 C# 11的预览特性请创建一个 C# 项目并将 LangVersion 设置为 preview.csproj 文件配置如下Project SdkMicrosoft.NET.SdkPropertyGroupOutputTypeExe/OutputTypeTargetFrameworknet6.0/TargetFrameworkImplicitUsingsenable/ImplicitUsingsNullableenable/NullableLangVersionpreview/LangVersion/PropertyGroup
/Project有关 C# 11 的更多详细内容请查看博客原文或通过 GitHub 上的 CSharpLang 存储库https://github.com/dotnet/csharplang/discussions进行讨论。