Общий T с Enum и приведение T к Enum

Я поискал и не смог ' Я не нашел никаких примеров, делающих это, хотя это было полезно:

Создать универсальный метод, ограничивающий 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. Производительность в этом случае не проблема. думал, что работа со струнами может быть медленной, и меня всегда интересуют советы по производительности.

5
задан Community 23 May 2017 в 12:34
поделиться