.NET 10 首个预览版已经在前两天发布,该版本在 .NET Runtime、SDK、libraries、C#、ASP.NET Core、Blazor 和 .NET MAUI 等多个方面都有重大改进和增强。其中C# 14 预览版也伴随着.NET 10预览版一起发布了,今天就和大家一起体验一下.NET 10 和 C# 14 。

01、安装

首先需要下载.NET 10.0.0-preview.1版本SDK,然后直接安装即可。

安装完成后,可以通过dotnet --list-sdks指令查看是否已成功安装.NET 10 review 1。

除此之外还可以通过更新IDE Visual Studio 2022至最新版本。

02、创建.NET 10 类库

下面我们就来在 Visual Studio 2022 中体验.NET 10 。

但是当我们创建.NET 10类库时,却发现框架列表中并没有.NET 10 选项,如下图。

这是因为Visual Studio默认不可以使用预览版的SDK。因此我们先要在IDE中开启使用预览版SDK功能,具体开启方法如下:

首先选中菜单中的工具,然后点开选项对话框,在环境列表中找到预览功能,找到使用.NET SDK预览版复选框并选中,最后点击确认即可。记得需要重启Visual Studio。

我们再次创建.NET 10 类库,此时发现框架列表中已经可以选择.NET 10选项了,如下图:

03、开启C# 14预览版

在.NET 10 预览版 1 中也跟随着发布了C# 14 预览版。但是要想使用C# 14预览版功能也是需要做一些设置的。

我们可以先选中上节创建的NET10类库,然后右键鼠标,选择属性,找到生成中的高级选项,可以发现当前语言版本还是C# 13 ,如下图。

因此我们需要选择类库,右键鼠标,选择编辑项目文件,在PropertyGroup中添加preview节点,如下图。

此时我们将可以使用C# 14 预览版功能了。

04、C# 14功能体验

1.field关键字

该关键字主要作用是在编写属性访问器时,不需要额外显示编写一个后备字段。

下面我们看下新老版本中编写一个属性访问器的差异,代码如下:

//老版本写法
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

.NET10 - 预览版1新功能体验(一)的更多相关文章

  1. Visual Studio 2022 预览版3 最新功能解说

    我们很高兴地宣布Visual Studio 2022 的第三个预览版问世啦!预览版3 提供了更多关于个人和团队生产力.现代开发和持续创新等主题的新功能.在本文中,我们将重点介绍Visual Studi ...

  2. 关于在Visual Studio 2019预览版中的用户体验和界面的变化

    原文地址:https://blogs.msdn.microsoft.com/visualstudio/2018/11/12/a-preview-of-ux-and-ui-changes-in-visu ...

  3. TMS WEB Core v1.2预览版:新的Electron应用程序支持

    2019年2月20日,星期三 几个月前,我们已经开始与Electron进行实验.在工作概念验证之后,我们的目标是为Delphi开发人员尽可能多地包装Electron API.但当然不仅仅是可以使用的E ...

  4. (转)ASP.NET MVC 第五个预览版和表单提交场景

    转自:http://ourlife.blog.51cto.com/708821/296171 上个星期四,ASP.NET MVC开发团队发布了ASP.NET MVC框架的“第五个预览版”.你可以在这里 ...

  5. Dubbo 3.0 预览版解读,6到飞起~

    , false).start(); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new St ...

  6. Azure SQL 数据库最新版本现已提供预览版

     Tiffany Wissner  数据平台营销高级总监 我们之前在11月宣布将提供新的预览版,在该预览版中我们引入了接近完整的 SQL Server 引擎兼容性和更为高级的性能,这些都代表了下一代的 ...

  7. .NET Core 3.0预览版7中的ASP.NET Core和Blazor更新

    .NET Core 3.0 Preview 7现已推出,它包含一系列ASP.NET Core和Blazor的新更新. 以下是此预览中的新功能列表: 最新的Visual Studio预览包括.NET C ...

  8. 20天等待,申请终于通过,安装和体验IntelliJ IDEA新UI预览版

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于IDEA的预览版 IDEA会启用新的UI,这事情之 ...

  9. VS2015预览版中的C#6.0 新功能(二)

    VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(三) 自动属性的增强 只读自动属性 以前自动属性必须同时提供setter和getter方法,因而只读属性只能通 ...

  10. VS2015预览版中的C#6.0 新功能(三)

    VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(二) Using static 使用using StaticClass,你可以访问StaticClass类里的 ...

随机推荐

  1. 使用 .NET Core 实现一个自定义日志记录器

    目录 引言 1. 抽象包 1.1 定义日志记录接口 1.2 定义日志记录抽象类 1.3 表结构迁移 2. EntityFramework Core 的实现 2.1 数据库上下文 2.2 实现日志写入 ...

  2. 【Rive】Android与Rive交互

    1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationView android: ...

  3. /etc/rancher/k3s/registries.yaml

    mirrors: "192.168.50.3": endpoint: - "https://192.168.50.3"configs: "192.16 ...

  4. 解决File "<input>", line 1 pip install XXXX ^ SyntaxError: invalid syntax

    首先退出python exit() 打开cmd里直接输入(不要进python) pip install XXX

  5. Qt/C++通用跨平台Onvif工具/支持海康大华宇视华为天地伟业等/云台控制/预置位管理/工程调试利器

    一.前言 在安防视频监控行业,Onvif作为国际标准,几乎主要的厂商都支持,不仅包含了国内的厂商,也包括主要的国际厂商,由于有了这个标准的存在,使得不同设备不同安防平台之间,能够接入各个厂家的硬件设备 ...

  6. Qt编写安防视频监控系统30-GPS运动轨迹

    一.前言 此功能是一个客户定制的,主要是需要在地图上动态显示GPS的运动轨迹,有个应用场景就是一个带有监控的车子,实时在运动中,后台可以接收到经纬度信息,需要绘制对应的轨迹,相当于这些摄像机点位是动态 ...

  7. Python中的包、模块和源码的组织关系

  8. 一套十万级TPS的IM综合消息系统的架构实践与思考

    本文由作者jhon_11分享,有大量修订和改动. 1.引言 如何设计一款高性能.高并发.高可用的im综合消息平台是很多公司发展过程中会碰到且必须要解决的问题.比如一家公司内部的通讯系统.各个互联网平台 ...

  9. 优化博客Ⅱ-CDN加速

    CDN加速 自从有了第一次博客优化经验,我就越发对优化感兴趣了嘿嘿(✧∇✧). 看着博客首页打开时长为1200ms左右,我又开始琢磨有什么办法能再给网站提提速,让访问时间降低到1000ms以下,这时候 ...

  10. CDS标准视图:功能位置描述 I_FunctionalLocationText

    视图名称:功能位置描述 I_FunctionalLocationText 视图类型:基本视图 视图代码: 点击查看代码 @EndUserText.label: 'Functional Location ...