适用场景:多条件等值判断。
优势:代码更简洁,支持模式匹配。
// 优化前
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
};
适用场景:条件与执行逻辑的映射关系明确。
优势: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();
}
适用场景:多个条件分支包含复杂的业务逻辑。
优势:将逻辑封装到独立类中,符合开闭原则。
适用场景:条件用于验证前置条件或快速失败。
优势:减少嵌套层级,提高代码可读性。
适用场景:复杂对象类型判断或属性验证。
优势:语法简洁,支持类型检查和属性解构。
// 优化前
if (obj is User user && user.Age > 18 && user.IsVerified)
{
// 处理逻辑
}
// 优化后
if (obj is User { Age: > 18, IsVerified: true } user)
{
// 处理逻辑
}
适用场景:动态生成条件逻辑(如动态查询)。
优势:运行时构建和编译表达式,提高灵活性。
适用场景:多个条件需要按顺序处理,且可能被中途拦截。
优势:解耦条件与处理逻辑,支持动态组合。
// 定义处理器接口
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 表达式或字典映射。
- 复杂逻辑:使用策略模式或责任链模式分离关注点。
- 验证逻辑:使用提前返回减少嵌套。
- 动态条件:考虑表达式树或反射。