5个C#特性帮你避免项目中的重复代码

5个C#特性帮你避免项目中的重复代码

编码文章call10242025-08-07 13:05:244A+A-

多年来,我审查了数千行C#代码——从初级开发者的原型到企业级平台。

你知道我经常看到什么吗?

重复代码。

同样的验证逻辑出现在4个地方。重复的try-catch块。复制粘贴的服务调用,只有细微差别。

这并不总是有意的。有时只是缺乏意识。所以今天,我想帮你解决这个问题。

以下是C#中的5个强大特性,它们可以帮助你消除重复,提高可维护性,编写更优雅、DRY的代码。

1. 扩展方法

你是否曾经需要在多个地方检查null或修剪字符串?

不要在每个地方都写相同的工具代码,使用扩展方法

public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string value)
        => string.IsNullOrEmpty(value);
}

现在你可以像调用字符串类的一部分一样调用"hello".IsNullOrEmpty()。

使用它们来:

o 为你不控制的类型添加行为

o 将助手方法限制在命名空间范围内

o 提高可读性和重用性

但要避免滥用——不要在晦涩的扩展中隐藏复杂逻辑。

2. 泛型

如果你写过两个只在类型上不同的方法,你可能需要泛型。

public T FirstOrDefaultSafe<T>(IEnumerable<T> source)
{
    return source?.FirstOrDefault();
}

泛型让你抽象掉类型细节。这可以防止跨类型的重复,并促进可重用库的开发。

使用泛型来:

o 仓储模式

o 工具方法

o 通用服务响应

优秀的工程师抽象模式。伟大的工程师也抽象类型。

3. 特性和反射

想象一下有10个不同的模型类,需要验证一个名为Email的属性。

不要在每个地方重复逻辑,使用自定义特性并通过反射扫描它们。

[Required]
[EmailAddress]
public string Email { get; set; }

像ASP.NET Core这样的框架已经通过[DataAnnotation]特性做到了这一点。

但你可以为自己的需求编写:

o 自定义验证

o 审计

o 缓存行为

定义一次。到处应用。

在提高清晰度的地方使用它。但不要过度优化可读性。

4. 委托和Func<>

有时逻辑会改变,但结构不会。

不要重复整个方法,将变化的逻辑作为委托传递。

public void ProcessData(Func<string, string> transform)
{
    var raw = "input";
    var result = transform(raw);
    Console.WriteLine(result);
}

现在你可以注入逻辑,比如:

o s => s.ToUpper()

o s => new string(s.Reverse().ToArray())

委托保持结构恒定,逻辑灵活。

5. 基类和抽象类

经典的OOP仍然有效。

当你发现自己在服务或控制器中编写相同的方法时,提取一个基类。

public abstract class ControllerBase
{
    protected void Log(string message) { ... }
}

可重用性是清洁架构的基础。

只是不要继承太深——在合理的情况下优先选择组合。

最终思考

重复代码不仅仅是代码异味——它是未来的维护噩梦。

当相同的逻辑存在于5个地方时:

o 更难改变

o 容易破坏

o 测试痛苦

C#语言为你提供了强大的工具来保持代码DRY。但由你来谨慎地应用它们。

所以下次你发现自己复制粘贴时——暂停。

问:我能把这个提取到一个方法中吗?一个扩展?一个泛型助手?

清洁代码不仅仅是写更少的行。

它是关于构建与团队一起成长的系统——而不是在自身重量下崩溃。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4