LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

9 个消除或简化减少 C# 条件语句的方法总结

admin
2025年2月23日 13:58 本文热度 24

前言

嗨,大家好!

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

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

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

1. 使用多态

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

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

// 定义一个抽象基类
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. 字典映射

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

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

public string GetDayOfWeek(int dayNumber)
{
    var days = new Dictionary<intstring>
    {
        { 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 代替 foreach 和 if 的组合,简化集合过滤和操作。

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

var numbers = new List<int> { 123456 };

// 使用 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<intbool> 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 == nullreturn;
    if (order.Items.Count <= 0return;

    // 处理订单逻辑
}

总结

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

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


该文章在 2025/2/24 9:35:02 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved