c# 枚舉類型轉換字元串 enum to string
枚舉類型都是值類型。
system.enum是一個抽象類(abstract class),所有枚舉類型都直接繼承自它,當然也同時繼承了它的所有成員。
所有的值類型都是system.valuetype的後代,枚舉類型也不例外,枚舉類型直接繼承自system.enum,而system.enum卻又直接繼承自system.valuetype的,是以,枚舉類型也是 system.valuetype的後代。
值類型都是system.valuetype的後代,但system.valuetype的後代不全是值類型,system.enum就是唯一的特例!
在system.valuetype的所有後代中,除了system.enum之外其它都是值類型。
事實上,我們可以在.net的源代碼中找到system.enum的聲明:
public abstract class enum : valuetype, icomparable, iformattable, iconvertible
1. 所有枚舉類型(enum type)都是值類型。
2. system.enum和system.valuetype本身是引用類型。
3. 枚舉類型(enum type)都是隐式的直接繼承自system.enum,并且這種繼承關系隻能由編譯器自動展開。但system.enum本身不是枚舉類型(enum type)。
4. system.enum是一個特例,它直接繼承自system.valuetype,但本身卻是一個引用類型。
5. 枚舉類型可以被裝箱成system.enum、system.valuetype、system.object或者system.iconvertible、system.iformattable、system.icomparable。
注意:在.net 1.1上,枚舉類型隻能被裝箱到system.enum、system.valuetype、system.object;而在.net 2.0上,枚舉類型還能被裝箱到system.enum所實作的三個接口:system.iconvertible、 system.icomparable、system.iformattable。對應的裝箱操作既可以為隐式的也可以是顯式的
enumtype
{
a=1,
b=2,
c=3
}
enumtype newtype=(enumtype)enum.parse(typeof(enumtype),"a");
string[] names=emum.getnames(typeof(enumtype));
array values=enum.getvalues(typeof(enumtype));
for(int i=0;i
{
dropdownlist.items.add(new listitem(names[i],values.getvalue(i)));
}
.net public enum timeofday
{
morning = 0,
afternoon = 1,
evening
}
再看
public void enumtest()
{
timeofday time = timeofday.afternoon;
//将枚舉字元串列印,即枚舉類型轉換(解析)成字元串類型
console.writeline(time.tostring());//輸出:afternoon
//擷取枚舉字元串的值,即将一個表示枚舉成員的字元串,解析為對應枚舉類型
timeofday time2 = (timeofday)enum.parse(typeof(timeofday), "evening", true);
//枚舉類型可以強制轉換成整型,整型也可以強制轉換成枚舉型
console.writeline((int)time2);//輸出:2
// 周遊所有的枚舉元素 ;
foreach (string s in enum.getnames(typeof(timeofday)))
{
console.writeline(s);
}
//輸出: morning
// afternoon
// evening
}