建議110 用類來代替enum

2021-07-22 12:40:02 字數 1716 閱讀 7907

建議110:用類來代替enum

列舉(enum)用來表示一組固定的值。例如,為了表示星期資訊,我們可以定義列舉week:

enum

week

列舉最大的優點在於它的型別是值型別。相比較引用型別來說,它可以在關鍵演算法中提公升效能,因為它不需要建立在「堆」中。但是,如果不考慮這方面的因素,我們不妨讓類(引用型別)來代替列舉。**如下:

class

week

}

我們將型別week的構造方法實現為private,這有效阻止了型別在外部生成類的例項,使它的行為更接近於列舉。

類week相比列舉week的優點在於,它能夠新增方法或重寫基類方法,以便提供豐富的功能。以星期為例,如果要提供更有意義的字串,如指定monday是星期一,對於列舉來說,這並不是天然支援的。甚至會大費周折。曾經有人實現過列舉的這種功能:

enum

week

[attributeusage(attributetargets.field, allowmultiple = false

)]

public

sealed

class

enumdescriptionattribute : attribute

}public enumdescriptionattribute(string

description)

: base

()

}public

static

class

enumhelper

string description =value.tostring();

fieldinfo fieldinfo =value.gettype().getfield(description);

enumdescriptionattribute attributes = (enumdescriptionattribute)fieldinfo.getcustomattributes(typeof(enumdescriptionattribute), false

);

if (attributes != null && attributes.length > 0

)

return

description;}}

static

void main(string

args)

輸出:星期一

如果不為列舉元素加上屬性enumdescription特性,我們只能使用:

console.writeline(enumhelper.getdescription(week.monday));
輸出:

monday

如果在類中,就不會有列舉的這種不方便了,因為可以通過重寫object的tostring方法將問題解決。**如下:

static

void main(string

args)

class

week

public

override

string

tostring()}}

相比列舉而言,類能賦予型別更多的行為。當然,如果應用場合滿足如下特性,我們就應該更多的考慮使用列舉:

**:《編寫高質量**改善c#程式的157個建議》陸敏技

使用列舉enum來代替if else

在平時的 中,if else肯定是必不可少,但是有時使用if else卻不是 的最好選擇,下面介紹下平時會在實際工作 中使用到的用enum來代替if else的寫法.現在有個需求,我們公司有vip等級,1,2,3,根據等級高低,能獲取不同的優惠資訊,最簡單也最容易想到的 是 獲取折扣資訊 publi...

用「類」來代替「遞迴方法」,用php舉例。

author 大齡青年 問題 乙個樓梯有n個台階,每次上乙個或兩個台階,共有多少種上法,每種走法的步驟是什麼樣的?這個簡單問題,我們通常的方法是寫乙個遞迴呼叫,簡單明瞭。但是,這裡通過類的疊加來實現,雖然本身沒有太大的意義,但是這種設計的用途還是滿多的,可以自己考慮考慮。乙個樓梯有n個台階,每次上乙...

使用ENUM來代替字串型別

這個表包含了110,000條記錄,只有10mb大小,所以可以全部放到記憶體中。service列有5個不同的值,平均字元長度為4個字元,method列有71個值,平均長度為20個字元。我們複製了該錶,把service和method列轉換為enum,如下 create table webservicec...