前言
嗨,大家好!
在你的編程生活中,一定少不了跟條件語句打交道,但是條件語句用得多了,你會發現程序變得越來越復雜,測試時經常會漏掉一些分支,而且大量的 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 編輯過