前言
嗨,大家好!
在你的编程生活中,一定少不了跟条件语句打交道,但是条件语句用得多了,你会发现程序变得越来越复杂,测试时经常会漏掉一些分支,而且大量的 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<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 代替 foreach
和 if
的组合,简化集合过滤和操作。
优点:代码更简洁,可读性更高。
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 个消除或简化减少条件语句的方法。
根据具体的场景和需求选择合适的方法,可以单独使用,也可以组合使用,不妨在你的代码中试试!
该文章在 2025/2/24 9:35:02 编辑过