C#条件语句消除或简化减少的九种方法

 更新时间:2025年11月19日 09:15:11   作者:代码掌控者  
在你的编程生活中,一定少不了跟条件语句打交道,但是条件语句用得多了,你会发现程序变得越来越复杂,测试时经常会漏掉一些分支,所以本文总结了 9 个消除或简化减少 C# 条件语句的小技巧,需要的朋友可以参考下

前言

在你的编程生活中,一定少不了跟条件语句打交道,但是条件语句用得多了,你会发现程序变得越来越复杂,测试时经常会漏掉一些分支,而且大量的 if-else 语句阅读起来理解非常困难,维护起来也特别困难!

所以减少或简化条件语句不仅能提高代码的可读性,还能降低维护成本和减少潜在的错误。

我总结了 9 个消除或简化减少 C# 条件语句的小技巧,希望它们能为你的编程旅程增添一份灵感,让你的代码更加简洁优雅,从此告别那些令人头疼的条件语句迷宫!

1. 使用多态

通过多态,将条件逻辑分散到不同的类中,从而减少 ifswitch 语句。

优点:避免了 ifswitch 语句,代码更易扩展。

示例:

// 定义一个抽象基类
abstract class Animal
{
    public abstract void MakeSound();
}

// 派生类实现具体行为
class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Woof!");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Meow!");
    }
}

// 使用多态代替条件语句
Animal myAnimal = new Dog();
myAnimal.MakeSound(); // 输出: Woof!

myAnimal = new Cat();
myAnimal.MakeSound(); // 输出: Meow!

2. 字典映射

将条件逻辑映射到字典中,用键值对代替 switchif-else

优点:代码更简洁,易于扩展新的操作。

public string GetDayOfWeek(int dayNumber)
{
    var days = new Dictionary<int, string>
    {
        { 1, "星期一" },
        { 2, "星期二" },
        { 3, "星期三" },
        { 4, "星期四" },
        { 5, "星期五" },
        { 6, "星期六" },
        { 7, "星期日" }
    };

    return days.TryGetValue(dayNumber, out var day) ? day : "无效的天数";
}

3. ?? 和 ?. 运算符

这两个运算符可以简化空值检查和默认值赋值。

优点:减少 if 语句,代码更简洁。

string name = null;

// 使用空合并运算符(??)提供默认值
string displayName = name ?? "Guest";
Console.WriteLine(displayName); // 输出: Guest

// 使用空条件运算符(?.)避免空引用异常
int? length = name?.Length;
Console.WriteLine(length ?? 0); // 输出: 0

4. 三元运算符(?:)

可以简化简单的 if-else 语句。

优点:单行简单条件判断,避免多行代码。

示例:

int age = 20;

// 使用三元运算符代替 if-else
string status = age >= 18 ? "Adult" : "Minor";
Console.WriteLine(status); // 输出: Adult

5. 策略模式

将不同的行为封装到独立的策略类中,避免条件语句。

优点:避免条件语句,易于扩展新的策略。

// 策略接口
public interface IDiscountStrategy
{
    double CalculateDiscount(double amount);
}

// 几个策略实现
public class NoDiscount : IDiscountStrategy
{
    public double CalculateDiscount(double amount) => 0;
}

public class FivePercentDiscount : IDiscountStrategy
{
    public double CalculateDiscount(double amount) => amount * 0.05;
}

public class TenPercentDiscount : IDiscountStrategy
{
    public double CalculateDiscount(double amount) => amount * 0.10;
}

// 上下文
public class DiscountContext
{
    private IDiscountStrategy _strategy;

    public DiscountContext(IDiscountStrategy strategy)
    {
        _strategy = strategy;
    }

    public double GetDiscount(double amount)
    {
        return _strategy.CalculateDiscount(amount);
    }
}

// 使用示例
var context = new DiscountContext(new TenPercentDiscount());
var discount = context.GetDiscount(150); // 15

6. LINQ

用 LINQ 代替 foreachif 的组合,简化集合过滤和操作。

优点:代码更简洁,可读性更高。

示例:

var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };

// 使用 LINQ 过滤偶数
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();

Console.WriteLine(string.Join(", ", evenNumbers)); // 输出: 2, 4, 6

7. 模式匹配

使用 C# 8.0 增强后的 switch 表达式简化多条件判断。

优点:支持类型和条件模式匹配,代码更直观。

// (扩展应用)
string message = input switch {
    int n when n < 0 => "负数",
    int n when n == 0 => "零",
    int n when n > 0 => "正数",
    _ => "未知"
};
Console.WriteLine(message);

8. 委托 / Lambda 表达式

将条件逻辑封装到委托或 Lambda 表达式中,减少重复代码。

优点:逻辑复用,代码更灵活。

// 定义一个委托
Func<int, bool> isEven = x => x % 2 == 0;

// 使用委托代替条件语句
Console.WriteLine(isEven(4) ? "Even" : "Odd"); // 输出: Even
Console.WriteLine(isEven(3) ? "Even" : "Odd"); // 输出: Odd

9. 提前返回

通过尽早返回结果来减少嵌套的条件判断。

优点:逻辑分层清晰,减少深层嵌套。

public void ProcessOrder(Order order)
{
    if (order == null) return;
    if (order.Items.Count <= 0) return;

    // 处理订单逻辑
}

总结

以上就是我总结的 9 个消除或简化减少条件语句的方法。

根据具体的场景和需求选择合适的方法,可以单独使用,也可以组合使用,不妨在你的代码中试试!

到此这篇关于C#条件语句消除或简化减少的九种方法的文章就介绍到这了,更多相关C#条件语句消除或减少内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 聊聊C# 中HashTable与Dictionary的区别说明

    聊聊C# 中HashTable与Dictionary的区别说明

    这篇文章主要介绍了聊聊C# 中HashTable与Dictionary的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C# wpf使用DockPanel实现制作截屏框

    C# wpf使用DockPanel实现制作截屏框

    做桌面客户端的时候有时需要实现截屏功能,能够在界面上框选截屏,本文就来为大家介绍一下wpf如何使用DockPanel制作截屏框吧,感兴趣的可以了解下
    2023-09-09
  • c# 组合模式

    c# 组合模式

    组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。需求中式体现部分与整体层次的结构时,统一地使用组合对象中的所有对象时,应该考虑使用组合模式
    2012-10-10
  • C#网页信息采集方法汇总

    C#网页信息采集方法汇总

    这篇文章主要介绍了C#网页信息采集方法,实例汇总了三种常用的方法,是非常实用的技巧,需要的朋友可以参考下
    2014-10-10
  • 在C# WPF中实现登录页面跳转的两种方案

    在C# WPF中实现登录页面跳转的两种方案

    在 C# WPF 中实现登录页面跳转,核心是 “验证登录逻辑” 与 “页面切换” 结合,常用两种方案:NavigationWindow 导航跳转(适合多页面场景)和Window+UserControl 切换(适合单窗口集成场景),本文介绍了具体实现步骤,需要的朋友可以参考下
    2025-10-10
  • Unity扩展Hierachry的右键菜单

    Unity扩展Hierachry的右键菜单

    这篇文章主要为大家详细介绍了Unity扩展Hierachry的右键菜单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • c#的sortedlist使用方法

    c#的sortedlist使用方法

    这篇文章主要介绍了c#的sortedlist使用方法,需要的朋友可以参考下
    2014-05-05
  • C#中Thread.CurrentThread的用法小结

    C#中Thread.CurrentThread的用法小结

    本文主要介绍了C#中Thread.CurrentThread的用法小结,通过Thread.CurrentThread可以访问和修改当前线程的各种属性和方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • C#实现快递api接口调用方法

    C#实现快递api接口调用方法

    这篇文章主要介绍了C#实现快递api接口调用方法,主要是通过快递API网接口的服务,使用的时候直接申请个接口UID即可,有需要的小伙伴来参考下吧。
    2015-03-03
  • 使用Log4net进行日志记录

    使用Log4net进行日志记录

    本文详细讲解了使用Log4net进行日志记录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12

最新评论