Я поискал и не смог ' Я не нашел никаких примеров, делающих это, хотя это было полезно:
Создать универсальный метод, ограничивающий T до Enum
У меня есть универсальная функция, которая обертывает функцию в API (к которому я не могу прикоснуться). принимает System.Enum и возвращает то же самое. Моя общая версия упрощает тонкий gs в неурезанной версии этого примера.
Проблема в том, что я не мог перейти от T к System.Enum или обратно, поскольку T не ограничен System.Enum (по крайней мере, в моем понимании).
Следующий код работает, но мне любопытно узнать, есть ли какие-нибудь скрытые ловушки или лучшие способы, поскольку я новичок в дженериках:
using System
using System.Collections.Generic
...
public T EnumWrapper(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.S. Производительность в этом случае не проблема. думал, что работа со струнами может быть медленной, и меня всегда интересуют советы по производительности.