IRONSOFTWAREHOME

简化 C# 代码的 14 种方法--Tim Corey 视频中关于 C# 最佳实践的见解

14 Ways to Simplify Your C# Code

Tim Corey

44m 57s

在蒂姆·科里 (Tim Corey) 制作的综合视频" 14 种简化 C# 代码的方法"中,他探讨了提高代码可读性、减少混乱并保持代码库可维护性的实用 C# 最佳实践。 Tim 并不沉迷于一行行代码或晦涩难懂的技巧,而是专注于良好的编码实践——如何编写其他开发人员可以遵循的简洁、易懂的代码。

他以 Visual Studio 中的真实示例为框架来讲解每个技巧,涉及命名约定、错误处理,甚至如何在不破坏现有功能的情况下重构代码。 这不仅仅是理论——实践才能真正提升代码质量。

在本文中,我们将逐一介绍他所展示的 14 种方法。

1. 使用静态 using 语句可以编写更简洁的代码

Tim 首先展示了静态访问如何简化重复调用。 通过声明:

using static System.Console;

您不再需要在每个静态成员之前加上 Console。

这不仅仅是删除文字——而是要明确静态访问方式。 Tim 指出,如果你要调用在常用类(如 Console 或 Math)中定义的静态成员,这种简写方式可以提高代码的可读性。

然而,作为良好编码实践的一部分,他警告开发人员应该避免冲突——两个不同的类可能对静态成员使用相同的名称。 意识到可能出现的意外行为至关重要。

2. 使用以下方式初始化列表

C# 现在允许你更直接地初始化列表:

List<string> names = ["Tim", "Sue", "Bilbo"];

Tim 解释说,这并不是要把所有内容都塞进一个语句里——而是要编写更易于阅读的代码,并通过减少繁琐的步骤来优化性能。

读者无需解析"新的字符串列表"样板代码,而是可以直接看到真正重要的东西:集合中的描述性名称。 Tim 还指出,这种方法也适用于数组甚至字典,符合以清晰性为优先的编码规范。

3. 目标类型新

另一个省时方法:目标类型新建。 而不是:

List<int> numbers = new List<int>();

你可以写:

List<int> numbers = new();

Tim 指出,重复类名是不必要的——它已经在左侧了。这符合良好的编码实践,既消除了冗余,又使代码库更易于阅读。

4. var 和匿名类型

Tim 探讨了 var 特性,该特性在编码实践圈内引发了争论。 有些人不喜欢它,因为它隐藏了变量名和类型,但 Tim 澄清说,它的真正力量在于匿名类型。

在使用数据源(例如通过 Dapper 使用 SQL)时,Tim 展示了如何使用 var 函数动态创建对象:

var parameters = new { FirstName = "Tim", LastName = "Corey" };

这非常适合写入查询或一次性对象——您无需仅仅为了参数而创建基类。 正如 Tim 所说,这样可以避免用不必要的类型污染你的代码库,同时在出现问题时还能提供有意义的错误消息。

5. 文件作用域命名空间

Tim 转向文件作用域命名空间,并展示了如何实现这一点:

namespace ProjectName
{
    // indented code
}

变成这样:

namespace ProjectName;

这一小小的改动消除了不必要的缩进,并遵循了 C# 命名约定,例如公共成员的 Pascal 命名法。 Tim解释说,由于大多数文件只包含一个命名空间,这提高了代码的可读性,并保持了逻辑部分的对齐。

6. 单行数据结构的记录

使用记录功能,您只需一条语句即可定义数据对象:

public record EmployeeRecord(int Id, string Name);

Tim 指出,这样只需付出最小的努力就能生成一个完整的类型——属性、不可变性和 ToString() 方法。 他明确表示,派生类场景仍然需要类,但当对象是只读时,记录遵循单一职责原则,做好一件事。

7. 模式匹配

Tim 演示了模式匹配如何帮助你处理异常情况并安全地进行比较。 与其编写冗长的类型检查,不如将它们合并起来:

if (emp is EmployeeRecord e)
{
    e.Id = 1;
}

这一行代码负责检查和转换。 Tim 说这符合良好的编码实践——避免使用像 x 或 y 这样的单字母变量名,而是使用像 e 这样的描述性名称。 清晰的方法名和变量名使其他开发人员更容易维护代码。

8. 字符串插值

为了构建易读的字符串,Tim 演示了字符串插值:

$"The employee with ID {e.Id} is {e.Name}"

他指出,这样可以更轻松地显示有意义的错误信息并编写注释。 与其使用混乱的代码拼接,不如编写像英语一样易读的代码——提高代码质量,简化未来检查输出的单元测试。

9. 使用 nameof() 进行安全重构

Tim 展示了 nameof() 如何在重构代码时保护你。 字符串中硬编码的变量名如果被重命名,可能会导致意想不到的行为。 但通过写作:

nameof(emp)

编译器会自动更新每次使用情况。 这是保持代码库健康的最佳实践之一,它能帮助你编写简洁且结构清晰的代码。

10. 用于多个返回值的元组

Tim 没有创建一个仅仅为了返回两个值而创建的基类,而是使用了元组:

(string FirstName, string LastName) SplitName(string fullName)

这样就避免了不必要的外部依赖,并且遵循单一职责原则——该方法只是拆分一个名称,仅此而已。 正如蒂姆所说,避免过度设计,练习才能写出更好的代码。

11. 解构

Tim 在元组的基础上,展示了如何将结果分解为局部变量:

var (firstName, lastName) = SplitName("Tim Corey");

这样可以保持变量名称的描述性,并避免以后出现晦涩难懂的元组语法。 Tim 甚至还提到了丢弃未使用的值(使用 _),这表明了意图——没有一个单字母变量名没有得到解释。

12. 丢弃不需要的值

如果不需要元组的所有部分,Tim 建议丢弃它们:

var (firstName, _) = SplitName("Tim Corey");

这表明其他开发人员您有意忽略某个值——这对于测试框架或单元测试非常有用,因为并非所有输出都重要。

13. 不使用代码块的 using 语句

蒂姆转岗到资源管理和错误处理部门。 以前你会这样写:

using (var connection = new SqlConnection(connString))
{
    // work
}

现在,您可以使用:

using var connection = new SqlConnection(connString);

这符合 SOLID 原则——特别是单一职责原则和依赖倒置原则。 Tim 指出,这种语法对于数据库等外部依赖项非常有效,确保大多数异常处理更加清晰,并且连接始终关闭,从而避免性能问题,甚至避免在连接未被释放时出现 SQL 注入场景。

14. 内联变量声明

最后,Tim 讲解了用于解析等操作的内联变量声明:

if (int.TryParse(numberText, out int numberValue))

在这里,您可以在同一行创建局部变量。这有助于保持编码规范的严谨性和方法名称的描述性。通过合理地组织代码,您可以减少意外行为,并使未来的代码重构工作更加安全。

总结

Tim 在视频结尾提醒观众:这些简化不是为了编写晦涩难懂的一行代码,而是为了良好的编码实践。 使用静态记录、模式匹配、元组和丢弃等功能,可以编写简洁、现代的 C# 代码。

他鼓励开发者在采用这些功能时,要考虑命名约定、错误处理和有意义的名称。 "代码是供人阅读的,"蒂姆说——当你编写易于理解的代码时,你不仅能让自己的生活更美好,也能让其他开发人员的生活更美好。

简而言之:遵循这些 C# 最佳实践,遵循 SOLID 原则,例如单一职责原则、接口隔离原则和依赖倒置原则,你的代码不仅可以编译,还能提高性能、减少意外行为,并让你的团队快乐地进行编码。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户