那麼,它的排序的可能,但在另一面,你將有指定的基本類型是什麼:
public static T GetId<T>(this Enum value)
where T : struct, IComparable, IFormattable, IConvertible
{
return (T)Convert.ChangeType(value, typeof(T));
}
因爲System.Enum
是基類所有枚舉類型。說它:
PersonName person = PersonName.Robert;
short personId = person.GetId<short>();
既然你可以投幾乎什麼long
,你甚至可以有這樣的:
public static long GetId(this Enum value)
{
return Convert.ToInt64(value);
}
,並呼籲:
PersonName person = PersonName.Robert;
long personId = person.GetId();
是什麼,否則可能是得到一個object
實例返回,像這樣左右:
public static object GetId(this Enum value)
{
return Convert.ChangeType(task, Enum.GetUnderlyingType(value.GetType()));
}
PersonName person = PersonName.Robert;
var personId = (short)person.GetId();
// but that sort of defeats the purpose isnt it?
所有這些都涉及某種拳擊和拆箱。第二種方法看起來更好(甚至可以使它成爲標準類型int
),然後是第一種。
你在問什麼? – SLaks 2010-02-18 22:45:30
這是不可能的。 (你不能建立一個基於'enum'的基礎類型的方法) – SLaks 2010-02-18 22:53:44
爲什麼你需要一個擴展方法來做到這一點?投射到基礎類型已經很簡單,如'(int)SomeEnum.SomeValue' – 2010-02-19 08:07:10