由于Enum
Type实现了IConvertible
接口,因此更好的实现应如下所示:
public T GetEnumFromString<T>(string value) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException("T must be an enumerated type");
}
//...
}
这仍然允许传递实现的值类型IConvertible
。机会虽然很少。