该关键字主要作用是在编写属性访问器时,不需要额外显示编写一个后备字段。
下面我们看下新老版本中编写一个属性访问器的差异,代码如下:
//老版本写法private string _msg;public string MessageOld{ get => _msg; set => _msg = value;}//新版本写法public string MessageNew{ get; set => field = value;}field关键字不单单是让我们少写一个后备字段使得代码更简洁,同时也使得代码更安全,防止了因为不小心导致其他属性方法错误使用后备字段。
其实该关键字在C# 13预览版就已经有了,但是最终并包含进C# 13正式版本中,我个人还是很期待它可以进入C# 14 正式版本中的。
2.nameof表达式支持未绑定的泛型类型
在新的语法中,nameof表达式的参数可以是未绑定的泛型类型,如List<>,则结果为“List”,示例代码如下:
var result = nameof(List<>);Console.WriteLine($"nameof(List<>) 结果为:{result}");
而在老的语法中并不支持这样写,否则会报错。
3.Span隐式转换
在C# 14中对System.Span 和 System.ReadOnlySpan类型的支持进一步加强,添加了一些新的隐式转换,进而使得你在使用这些类型时更加方便自然,即获得了代码的性能同时还不牺牲代码的安全性。
下面我们就通过代码演示在C# 14中,int数组隐式转为Span和ReadOnlySpan,以及Span隐式转换ReadOnlySpan,代码如下:
public static class SpanExtensions{ public static void HandleSpan<T>(this Span<T> span) { } public static void HandleReadOnlySpan<T>(this ReadOnlySpan<T> span) { }}static class Program{ static void Main() { var array = new int[4] { 5, 6, 7, 8 }; //直接调用拓展方法,int数组隐式转换为Span<int> array.HandleSpan(); //直接调用拓展方法,int数组隐式转换为ReadOnlySpan<int> array.HandleReadOnlySpan(); Span<int> span = array; //直接调用拓展方法,Span<int>隐式转换为ReadOnlySpan<int> span.HandleReadOnlySpan(); }}C# 14还有一些其他更新,后续我们将继续讲解。 注:测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。https://gitee.com/hugogoos/Planner