发布于 2026-01-06 0 阅读
0

5 个会让你的 C# 代码变得混乱的坏习惯 - 以及如何避免它们 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

5 个会让你的 C# 代码变得混乱的坏习惯——以及如何避免它们

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

如何判断你在使用 C# 编程时是否遵循了良好的编程实践?又该如何避免那些会让代码变得混乱且难以维护的不良实践?本文将探讨五种常见的不良实践,并解释如何通过一些更优的替代方案来避免它们。


停止使用 if 语句检查空值

if条语句用途广泛,其中之一是用来进行检查null。虽然这种表述方式也正确,但还可以更简洁一些:

糟糕的方式:

if (application != null)
{
    if (application.protected != null)
    {
        return application.protected.shieldLastRun;
    }
}
Enter fullscreen mode Exit fullscreen mode

好方法:

return application?.protected?.shieldLastRun;
Enter fullscreen mode Exit fullscreen mode

我从未说过你不能使用 if 语句进行空值检查,但是通过设置空值条件(这正是该功能实现的目的),我们可以获得更简洁、更易读的代码

📚查看微软文章了解更多信息:空值合并运算符


使用元组代替类

如果你想返回多个结果,首先想到的可能是为此创建一个专门的类。这当然是正确的方法,但并非最佳方法。

糟糕的方式:

public ApplicationInfo GetInfo()
{
    var application = new ApplicationInfo
    {
        Path = "C:/apps/",
        Name = "Shield.exe"
    };

    return application;
}
Enter fullscreen mode Exit fullscreen mode

好方法:

public (string Path, string Name) GetApplicationInfo()
{
    return ("C:/apps/", "Shield.exe");
}
Enter fullscreen mode Exit fullscreen mode

为此tuples,根据Mahesh Chand在其文章《C# 中的元组》中的说法:

“我们经常需要从类方法返回多个值。在 .NET 引入元组之前,有三种常见的方法可以做到这一点。”

  • 输出参数
  • 类或结构类型
  • 通过动态返回类型元组返回的匿名类型可以解决这个问题。

正如 Mahesh Chand 所说,元组可以解决这个问题。因此,使用元组比创建新类要好得多。

📚查看微软文章了解更多信息:C# 中的元组类型


避免使用私人成员进行修改

允许修改成员并非良好做法。您必须谨慎决定哪些成员可以修改,哪些成员不可以。

糟糕的方式:

class Laptop
{
    public string Os{ get; set; } // can be modified
public Laptop(string os)
    {
        Os= os;
    }
}
var laptop = new Laptop("macOs");
Console.WriteLine(Laptop.Os); // Laptop os: macOs
Enter fullscreen mode Exit fullscreen mode

好方法:

class Laptop
{
    public string Os{ get; } // cannot be modified
public Laptop(string os)
    {
        OS = os;
    }
}
var laptop = new Laptop("macOs");
Console.WriteLine(Laptop.Os); // Laptop os: macOs
Enter fullscreen mode Exit fullscreen mode

如果成员不会被修改,最好不要使用, set;以避免将来发生任何意外(或故意)修改。

📚查看微软文章了解更多信息:获取和设置访问器


使用条件运算符代替 if-else 语句。

我们常常出于习惯,只使用传统的方式if-else,仅此而已。我并不想把这看作是一种不好的做法,但确实有更好的方法:

糟糕的方式:

if (hasApplication)
{
   shouldProtect = true;
}
else
{
   shouldProtect = false;
}
Enter fullscreen mode Exit fullscreen mode

好方法:

bool shouldProtect = hasApplication ? true: false;
Enter fullscreen mode Exit fullscreen mode

我们可以清楚地看到,虽然它与 类似if-else,但通过使用三元条件运算符 ?:,它更容易阅读和理解,并且我们将得到更简洁的代码。

📚查看微软文章了解更多信息:条件运算符


避免使用首字母缩写作为标识符缩写

谈到编写整洁代码,人们首先想到的可能就是使用首字母缩写来缩短标识符中的代码。这固然是一种好习惯,但必须谨慎使用。

糟糕的方式:

//different identifiers but same abbreviation
private readonly SecurityManager _sm;
private readonly SoftwareManager _sm;
Enter fullscreen mode Exit fullscreen mode

好方法:

//No confusion
private readonly SecurityManager _securityManager;
private readonly SoftwareManager _softwareManager;
Enter fullscreen mode Exit fullscreen mode

如果要使用缩写,请务必三思,以免日后造成混淆。很多时候,简单并不等于最佳。

📚请查看微软文章系列了解更多信息:命名指南

文章来源:https://dev.to/bytehide/5-bad-practices-that-c​​an-make-your-c-code-messy-and-how-to-avoid-them-3p0f