全局使用-看看c# 10中的新语言特性
![ReSharper和Rider支持c# 8](http://www.glenndubin.com/wp-content/uploads/2017/09/dotnet-csharp.png)
欢迎来到我们系列的第三部分,在这里我们将仔细观察新的c#语言特性以及ReSharper和Rider是如何在你的代码库中轻松地采用它们的。欢迎使用c# 10和。net 6!
在本系列中,我们将探讨:
- File-Scoped名称空间
- 调用参数表达式
- 全球Usings
- 插入字符串的改进
- λ的改进
- 还有更多的消息要宣布
在这篇文章中,我们将看到新的全球使用可以提供帮助的不同方式。嘘!ReSharper和Rider都支持他们。现在,尽情享受吧!
全球Usings
代码库中有多少次包含了使用的行系统
或使用系统。Linq
?在单独的其他名称空间中,有些名称空间在整个解决方案的每个文件中都很常见。与此同时,如果你的文件模板没有包含这些内容,你就不得不一次又一次地导入它们,这是非常恼人的。
您可以使用c# 10全球使用的指令编译器将在整个项目中考虑:
// globaluses .cs global using System;// Program.cs (no use)WriteLine(“Hello World”);
你甚至可以更进一步,定义aGlobalUsing.Tests.cs
使用所有与测试相关的名称空间,并创建Directory.Build.props
在存储库的根目录.这将允许这些名称空间自动导入在每个项目的结尾测试
后缀:
<项目> < ItemGroup条件= " $ (MSBuildProjectName.EndsWith('测试'))">.
如果您正在寻找一个伟大的测试断言库,请记住,我们有一个伟大的OSS PowerUps和丹尼斯·达维登的谈话流利的断言!
全球usings也适用于其他变体,如静态usings和使用别名,这使得它们使用起来非常方便数学
计算代码中的静态类或用更好的实现替换常用类型:
// globaluses .cs global using static System.Math;全球使用控制台= Spectre.Console.AnsiConsole;// Program.cs var max = max (arg1, arg2);控制台。MarkupLine($”[粗体]最大输入:/{马克斯}”);
就像其他使用指令一样,ReSharper和Rider会突出显示任何未使用的全局using指令,这样你可以保持你的代码干净和最小:
![](http://www.glenndubin.com/wp-content/uploads/2021/11/global-usings-quickfix-resharper-1.png)
还有一个新的项目级属性称为ImplicitUsings
来添加一组通用名称空间依赖于SDK在您的项目中选择。例如,使用时Microsoft.NET.Sdk
,您将导入以下名称空间:
系统
System.Collections.Generic
系统。IO
系统。Linq
System.Net.Http
系统。线程
System.Threading.Tasks
与以前相比GlobalUsings.cs
文件,这些全局导入在MSBuild项目级工作。好消息是,你可以通过MSBuild定义自定义全局用法!回到前面的示例,使用测试名称空间,我们可以调整Directory.Build.props
把有关的基础设施放在一个地方:
<项目> < ItemGroup条件= " $ (MSBuildProjectName.EndsWith('测试'))">.
您还可以定义其他属性静态
(布尔),别名
(字符串)模拟一个真实的using指令:
作为一个库作者,你应该尊重你的用户配置,只添加全局使用<包id > . props
文件当ImplicitUsings
属性启用。作为一个图书馆用户,您可以手动删除不需要的名称空间,而无需完全禁用该特性:
由于哪个包引用全局地导入了额外的名称空间,这并不是显而易见的,所以我们希望——也许——获得一个一级属性PackageReference
物品。请随意投票问题!
下载ReSharper 2021.3 EAP或者看看骑手2021.3 EAP开始以最好的方式利用c# 10。我们很想听听你的想法!