Добавление ограничений для Nullable Enum

Я пишу некоторые функции Enum и имею следующее:

public static T ConvertStringToEnumValue<T>(string valueToConvert, bool isCaseSensitive)
{
    if (typeof(T).BaseType.FullName != "System.Enum" && typeof(T).BaseType.FullName != "System.ValueType")
    {
       throw new ArgumentException("Type must be of Enum and not " + typeof (T).BaseType.FullName);
    }

    if (String.IsNullOrWhiteSpace(valueToConvert))
      return (T)typeof(T).TypeInitializer.Invoke(null);

    valueToConvert = valueToConvert.Replace(" ", "");              

    if (typeof(T).BaseType.FullName == "System.ValueType")
    {
        return (T)Enum.Parse(Nullable.GetUnderlyingType(typeof(T)), valueToConvert, !isCaseSensitive);
    }

    return (T)Enum.Parse(typeof(T), valueToConvert, !isCaseSensitive);
}

Я называю это так:

EnumHelper.ConvertStringToEnumValue<Enums.Animals?>("Cat");

Теперь я хочу добавить ограничения для T в Enum, например (которые я получил из статьи о Stackoverflow ): где T: struct, IConvertible , но у меня проблемы с T должен иметь возможность принимать перечисления, допускающие значение NULL. В сообщении об ошибке говорится:

Тип «Enums.Animals?» должен быть типом значения, не допускающим значения NULL, чтобы использовать его в качестве параметра 'T' в универсальном типе или методе

Есть ли способ сделать это, или мне нужно просто полагаться на проверку времени выполнения, которая у меня внутри способ?

Всем спасибо!

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