超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

9 個(gè)消除或簡(jiǎn)化減少 C# 條件語(yǔ)句的方法總結(jié)

admin
2025年2月23日 13:58 本文熱度 652

前言

嗨,大家好!

在你的編程生活中,一定少不了跟條件語(yǔ)句打交道,但是條件語(yǔ)句用得多了,你會(huì)發(fā)現(xiàn)程序變得越來(lái)越復(fù)雜,測(cè)試時(shí)經(jīng)常會(huì)漏掉一些分支,而且大量的 if-else 語(yǔ)句閱讀起來(lái)理解非常困難,維護(hù)起來(lái)也特別困難!

所以減少或簡(jiǎn)化條件語(yǔ)句不僅能提高代碼的可讀性,還能降低維護(hù)成本和減少潛在的錯(cuò)誤。

我總結(jié)了 9 個(gè)消除或簡(jiǎn)化減少 C# 條件語(yǔ)句的小技巧,希望它們能為你的編程旅程增添一份靈感,讓你的代碼更加簡(jiǎn)潔優(yōu)雅,從此告別那些令人頭疼的條件語(yǔ)句迷宮!

1. 使用多態(tài)

通過(guò)多態(tài),將條件邏輯分散到不同的類(lèi)中,從而減少 if 或 switch 語(yǔ)句。

優(yōu)點(diǎn):避免了 if 或 switch 語(yǔ)句,代碼更易擴(kuò)展。

// 定義一個(gè)抽象基類(lèi)
abstract class Animal
{
    public abstract void MakeSound();
}

// 派生類(lèi)實(shí)現(xiàn)具體行為
class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Woof!");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Meow!");
    }
}

// 使用多態(tài)代替條件語(yǔ)句
Animal myAnimal = new Dog();
myAnimal.MakeSound(); // 輸出: Woof!

myAnimal = new Cat();
myAnimal.MakeSound(); // 輸出: Meow!

2. 字典映射

將條件邏輯映射到字典中,用鍵值對(duì)代替 switch 或 if-else。

優(yōu)點(diǎn):代碼更簡(jiǎn)潔,易于擴(kuò)展新的操作。

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 : "無(wú)效的天數(shù)";
}

3. ?? 和 ?. 運(yùn)算符

這兩個(gè)運(yùn)算符可以簡(jiǎn)化空值檢查和默認(rèn)值賦值。

優(yōu)點(diǎn):減少 if 語(yǔ)句,代碼更簡(jiǎn)潔。

string name = null;

// 使用空合并運(yùn)算符(??)提供默認(rèn)值
string displayName = name ?? "Guest";
Console.WriteLine(displayName); // 輸出: Guest

// 使用空條件運(yùn)算符(?.)避免空引用異常
int? length = name?.Length;
Console.WriteLine(length ?? 0); // 輸出: 0

4. 三元運(yùn)算符(?:)

可以簡(jiǎn)化簡(jiǎn)單的 if-else 語(yǔ)句。

優(yōu)點(diǎn):?jiǎn)涡泻?jiǎn)單條件判斷,避免多行代碼。

int age = 20;

// 使用三元運(yùn)算符代替 if-else
string status = age >= 18 ? "Adult" : "Minor";
Console.WriteLine(status); // 輸出: Adult

5. 策略模式

將不同的行為封裝到獨(dú)立的策略類(lèi)中,避免條件語(yǔ)句。

優(yōu)點(diǎn):避免條件語(yǔ)句,易于擴(kuò)展新的策略。

// 策略接口
public interface IDiscountStrategy
{
    double CalculateDiscount(double amount);
}

// 幾個(gè)策略實(shí)現(xiàn)
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 的組合,簡(jiǎn)化集合過(guò)濾和操作。

優(yōu)點(diǎn):代碼更簡(jiǎn)潔,可讀性更高。

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

// 使用 LINQ 過(guò)濾偶數(shù)
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();

Console.WriteLine(string.Join(", ", evenNumbers)); // 輸出: 2, 4, 6

7. 模式匹配

使用 C# 8.0 增強(qiáng)后的 switch 表達(dá)式簡(jiǎn)化多條件判斷。

優(yōu)點(diǎn):支持類(lèi)型和條件模式匹配,代碼更直觀(guān)。

// (擴(kuò)展應(yīng)用)
string message = input switch {
    int n when n < 0 => "負(fù)數(shù)",
    int n when n == 0 => "零",
    int n when n > 0 => "正數(shù)",
    _ => "未知"
};
Console.WriteLine(message);

8. 委托 / Lambda 表達(dá)式

將條件邏輯封裝到委托或 Lambda 表達(dá)式中,減少重復(fù)代碼。

優(yōu)點(diǎn):邏輯復(fù)用,代碼更靈活。

// 定義一個(gè)委托
Func<intbool> isEven = x => x % 2 == 0;

// 使用委托代替條件語(yǔ)句
Console.WriteLine(isEven(4) ? "Even" : "Odd"); // 輸出: Even
Console.WriteLine(isEven(3) ? "Even" : "Odd"); // 輸出: Odd

9. 提前返回

通過(guò)盡早返回結(jié)果來(lái)減少嵌套的條件判斷。

優(yōu)點(diǎn):邏輯分層清晰,減少深層嵌套。

public void ProcessOrder(Order order)
{
    if (order == nullreturn;
    if (order.Items.Count <= 0return;

    // 處理訂單邏輯
}

總結(jié)

以上就是我總結(jié)的 9 個(gè)消除或簡(jiǎn)化減少條件語(yǔ)句的方法。

根據(jù)具體的場(chǎng)景和需求選擇合適的方法,可以單獨(dú)使用,也可以組合使用,不妨在你的代碼中試試!


該文章在 2025/2/24 9:35:02 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved