를 열거하고이 일을 예제를 찾을 수 없습니다 : Create Generic method constraining T to an Enum일반 T는,
가 내가있는 기능을 래핑하는 일반적인 기능을 가지고 API (나는 만질 수 없다). 래핑 된 함수는 System.Enum을 사용하여 동일한 값을 반환합니다. 제네릭 버전은이 예제의 훼손되지 않은 버전에서 작업을 상당히 단순화합니다.
T는 System.Enum에 제약이 없기 때문에 T부터 System.Enum 또는 T에 대문자를 사용할 수 없습니다. 적어도 내 이해입니다.
다음 코드는 작동하지만 내가 제네릭에 아주 새로운 오전 있기 때문에 나는 숨겨진 함정, 또는 더 나은 방법이 있는지 알고 궁금 :이 정상이라면
using System
using System.Collections.Generic
...
public T EnumWrapper<T>(T enumVar) where T : struct, IFormattable, IConvertible, IComparable
{
if (!typeof(T).IsEnum)
throw new ArgumentException("Generic Type must be a System.Enum")
// Use string parsing to get to an Enum and back out again
Enum e = (Enum)Enum.Parse(typeof(T), enumVar.ToString());
e = WrappedFunction(e);
return (T)Enum.Parse(typeof(T), e.ToString());
}
가, 다음이 역할을 할 수 보기. 나는 이것을 발견 할 수 없었고, 최소한 그것이 작동하는 해결 방법이었다.
P. 성능은이 경우 문제가되지 않습니다. 나는 문자열 작업이 느릴 수도 있고 항상 성능 팁에 관심이 있다고 생각했다.
추가 IFormattable과에서 IComparable (감사 @Michael B) : http://stackoverflow.com/questions/7508455/generic-t-with-enum-and-casting-t-to-enum/7516220#7516220 – Rafe