1.一堆命名空间

  • C# 的源代码文件开头一般都会导入一堆命名空间。下面是一个普通的ASP.NET Web 应用程序的代码片段
  1. using LoggingTestApp.Data;
  2. using Microsoft.AspNetCore.Builder;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.AspNetCore.HttpsPolicy;
  5. using Microsoft.AspNetCore.Identity;
  6. using Microsoft.AspNetCore.Identity.UI;
  7. using Microsoft.EntityFrameworkCore;
  8. using Microsoft.Extensions.Configuration;
  9. using Microsoft.Extensions.DependencyInjection;
  10. using Microsoft.Extensions.Hosting;
  11. using Serilog;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Threading.Tasks;
  16. namespace LoggingTestApp
  17. {
  18. public class Startup
  19. {
  20. ...
  21. }
  22. }
  • 这段代码的写法没有什么特别之处。以前,命名空间的导入可以让我们快速了解某个类正在使用哪些库。然而如今,这只不过是一堆不得不写又没人去看的代码了。

  • C# 10 引入了一种新模式,允许你使用关键字 global 定义整个项目的命名空间导入。推荐做法是,将全局导入放在一个单独的文件中(每个项目一个),可以命名为 usings.cs 或imports.cs。其中的内容大致为:

2.usings.csimports.cs

  1. global using Microsoft.AspNetCore.Builder;
  2. global using Microsoft.AspNetCore.Hosting;
  3. global using Microsoft.AspNetCore.HttpsPolicy;
  4. global using Microsoft.AspNetCore.Identity;
  5. global using Microsoft.AspNetCore.Identity.UI;
  6. global using Microsoft.EntityFrameworkCore;
  7. global using Microsoft.Extensions.Configuration;
  8. global using Microsoft.Extensions.DependencyInjection;
  9. global using Microsoft.Extensions.Hosting;
  10. global using System;
  11. global using System.Collections.Generic;
  12. global using System.Linq;
  13. global using System.Threading.Tasks;

3.然后就可以简化原来的文件了

  1. using LoggingTestApp.Data;
  2. using Serilog;
  3. namespace LoggingTestApp
  4. {
  5. public class Startup
  6. {
  7. ...
  8. }
  9. }
  • Visual Studio会突出显示重复的命名空间(即同时在全局文件和本地文件中导入的命名空间)。尽管这不是错误,但删除重复的命名空间可以减少代码量,并将注意力集中在特定文件正在使用的特殊命名空间上

清理了垂直空间的浪费