建議110:用類來代替enum
列舉(enum)用來表示一組固定的值。例如,為了表示星期資訊,我們可以定義列舉week:
enum列舉最大的優點在於它的型別是值型別。相比較引用型別來說,它可以在關鍵演算法中提公升效能,因為它不需要建立在「堆」中。但是,如果不考慮這方面的因素,我們不妨讓類(引用型別)來代替列舉。**如下:week
class我們將型別week的構造方法實現為private,這有效阻止了型別在外部生成類的例項,使它的行為更接近於列舉。week
}
類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...