那么,它的排序的可能,但在另一面,你将有指定的基本类型是什么:
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