net工具 bob2002网站

全局使用-看看c# 10中的新语言特性

ReSharper和Rider支持c# 8

欢迎来到我们系列的第三部分,在这里我们将仔细观察新的c#语言特性以及ReSharper和Rider是如何在你的代码库中轻松地采用它们的。欢迎使用c# 10和。net 6!

在本系列中,我们将探讨:

在这篇文章中,我们将看到新的全球使用可以提供帮助的不同方式。嘘!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指令,这样你可以保持你的代码干净和最小:

删除多余的全局Using指令

还有一个新的项目级属性称为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。我们很想听听你的想法!

发现更多的

Baidu