J'écris certaines fonctionnalités Enum, et ont les éléments suivants:Conversion Null à Nullable Enum (générique)
public static T ConvertStringToEnumValue<T>(string valueToConvert,
bool isCaseSensitive)
{
if (String.IsNullOrWhiteSpace(valueToConvert))
return (T)typeof(T).TypeInitializer.Invoke(null);
valueToConvert = valueToConvert.Replace(" ", "");
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 (typeof(T).BaseType.FullName == "System.ValueType")
{
return (T)Enum.Parse(Nullable.GetUnderlyingType(typeof(T)),
valueToConvert, !isCaseSensitive);
}
return (T)Enum.Parse(typeof(T), valueToConvert, !isCaseSensitive);
}
Je donne maintenant ce qui suit:
EnumHelper.ConvertStringToEnumValue<Enums.Animals?>("Cat");
Cela fonctionne comme prévu . Toutefois, si je l'exécute:
EnumHelper.ConvertStringToEnumValue<Enums.Animals?>(null);
il casse avec l'erreur que TypeInitializer est null.
Est-ce que quelqu'un sait comment résoudre ce problème?
Merci à tous!
Pourquoi diable êtes-vous Invoquer le initialiseur de type ?? Dans mes 9 années de C#, je n'ai jamais eu besoin de le faire! – leppie
En fait, cet initialiseur de type ne retourne rien. Le code est faux, désolé. – leppie
@leppie, d'où mon affichage de la question. Je cherche un moyen de faire ce qui précède, et clairement le TypeInitializer n'est pas la bonne façon de le faire. La réponse ci-dessous de Preet est ce que je cherchais. – Richard