簡體   English   中英

更有效地刪除使用IF語句C#

[英]More efficient abridged use of IF statement C#

我想知道是否有更好的方法來使用if語句而不僅僅是長行

if(){
    //code
}else if(){
    //code
} else{
    //code
}

我在網站上做了一些研究,我發現了這個:

如果你只有2個值,我強烈建議使用你發布的代碼,因為它可能是最易讀,優雅和快速的代碼(恕我直言)。

但是如果你有更多這樣的案例並且更復雜,你可以考慮使用switch語句:

switch (el.type)
{
    case ElementType.Type1:
    case ElementType.Type2:
    case ElementType.Type3:
        //code here
        break;
    case ElementType.Type4:
    case ElementType.Type5:
        //code here
        break;
    case ElementType.Type6:
        //code here
        break;
}
that translated in if statements would be:

if (el.type == ElementType.Type1 ||
    el.type == ElementType.Type2 ||
    el.type == ElementType.Type3 )
{
    // code here
}else if(el.type == ElementType.Type4 ||
         el.type == ElementType.Type5)
{
    // code here
}else if(el.type == ElementType.Type6)
{
    // code here
}

它們完全等同於我,但是開關看起來更可讀/更清晰,你需要輸入更少(即代碼長度方面的“更短”):)

雖然我不太明白它告訴我的是什么,但它是否說switch語句更適用於long if語句或?

為了有一些關於我的問題的背景,我有一個帶有一些單選按鈕的Windows窗體應用程序 - 如果你願意,我會問一個調查問卷 - 我想知道是否有更有效的方法可以減少重復的不必要的代碼行並用短代碼替換它們同樣的工作。

切換語句以及許多if-else語句通常是臭設計的標志。 考慮重構為更面向對象的設計

If-elseswitch-case更不可讀,反之亦然。

目標應該是更可讀/更清晰的代碼,這並不總是意味着最短的陳述。

如果你有非常復雜的邏輯,有很多嵌套的if / else分支,試着把它拆分成更小,更簡單的例程。

您可以應用CoR模式 在這里,您將完成.NET實現之一。 當您將其與IoC容器結合使用時,您可以實現非常靈活的架構......

switch語句不僅更容易閱讀,而且編譯器更容易優化,因為它們明確指定了一個觸發所有代碼的值。 編譯器可以使用散列或跳轉表而不是一系列比較來輕松優化它,使其更快(當它可以這樣做時)。 從技術上講,它可以檢測到if語句是相同的,但可能會或可能不夠復雜。 因此,如果你有256個單獨的情況觸發一個byte的值,可以將一個開關編譯成代碼偏移的硬編碼數組(數組中的每個條目都是處理該情況的代碼的偏移量),並且沒有比較是完成所有因為它只能使用字節值作為硬編碼數組的索引並跳轉到正確的代碼。 這比做255(或256)比較快得多。

使用string值的開關也是專門處理的,使用哈希碼可以獲得更好的性能。 您可以明確地執行類似的操作,但是您的代碼可讀性會低得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM