if-else优化方案

1. 使用 switch 表达式

适用场景:多条件等值判断。
优势:代码更简洁,支持模式匹配。
// 优化前
if (status == "Active") return 1;
else if (status == "Inactive") return 0;
else if (status == "Pending") return 2;
else return -1;

// 优化后
return status switch
{
    "Active" => 1,
    "Inactive" => 0,
    "Pending" => 2,
    _ => -1
};

2. 使用字典(Dictionary)映射

适用场景:条件与执行逻辑的映射关系明确。
优势:O (1) 的查找效率,避免重复判断。
// 定义映射关系
private static readonly Dictionary<string, Action> ActionMap = new()
{
    { "Create", HandleCreate },
    { "Update", HandleUpdate },
    { "Delete", HandleDelete }
};

// 使用映射
if (ActionMap.TryGetValue(command, out var action))
{
    action();
}
else
{
    HandleDefault();
}

 

3. 策略模式(Strategy Pattern)

适用场景:多个条件分支包含复杂的业务逻辑。
优势:将逻辑封装到独立类中,符合开闭原则。
// 定义策略接口
public interface IStatusHandler
{
    void Handle();
}

// 实现具体策略
public class ActiveHandler : IStatusHandler { /* 实现逻辑 */ }
public class InactiveHandler : IStatusHandler { /* 实现逻辑 */ }

// 使用工厂获取策略
private readonly Dictionary<string, IStatusHandler> _handlers;

public void ProcessStatus(string status)
{
    if (_handlers.TryGetValue(status, out var handler))
    {
        handler.Handle();
    }
}

 

4. 提前返回(Guard Clauses)

适用场景:条件用于验证前置条件或快速失败。
优势:减少嵌套层级,提高代码可读性。
// 优化前
if (user != null)
{
    if (user.IsActive)
    {
        if (user.Role == "Admin")
        {
            // 执行逻辑
        }
    }
}

// 优化后
if (user == null) return;
if (!user.IsActive) return;
if (user.Role != "Admin") return;

// 执行逻辑

  


5. 模式匹配(Pattern Matching)

适用场景:复杂对象类型判断或属性验证。
优势:语法简洁,支持类型检查和属性解构。
// 优化前
if (obj is User user && user.Age > 18 && user.IsVerified)
{
    // 处理逻辑
}

// 优化后
if (obj is User { Age: > 18, IsVerified: true } user)
{
    // 处理逻辑
}

6. 使用表达式树(Expression Tree)

适用场景:动态生成条件逻辑(如动态查询)。
优势:运行时构建和编译表达式,提高灵活性。

// 动态构建条件
Expression<Func<User, bool>> expression = user => 
    user.Age > 18 && user.Status == "Active";

// 编译并执行
Func<User, bool> predicate = expression.Compile();
bool result = predicate(someUser);

 

7. 责任链模式(Chain of Responsibility)

适用场景:多个条件需要按顺序处理,且可能被中途拦截。
优势:解耦条件与处理逻辑,支持动态组合。
// 定义处理器接口
public interface IRequestHandler
{
    IRequestHandler SetNext(IRequestHandler handler);
    bool Handle(Request request);
}

// 实现具体处理器
public class AuthHandler : IRequestHandler { /* 验证逻辑 */ }
public class ValidationHandler : IRequestHandler { /* 验证逻辑 */ }

// 构建责任链
var chain = new AuthHandler().SetNext(new ValidationHandler());
chain.Handle(request);

  

总结

  • 简单条件:优先使用 switch 表达式或字典映射。
  • 复杂逻辑:使用策略模式或责任链模式分离关注点。
  • 验证逻辑:使用提前返回减少嵌套。
  • 动态条件:考虑表达式树或反射。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

总结

  • 简单条件:优先使用 switch 表达式或字典映射。
  • 复杂逻辑:使用策略模式或责任链模式分离关注点。
  • 验证逻辑:使用提前返回减少嵌套。
  • 动态条件:考虑表达式树或反射。
posted @ 2025-06-18 13:58  煤炭g  阅读(15)  评论(0)    收藏  举报