2012-05-24 4 views
1

J'ai une fonction avec type de retour générique. Si le paramètre value est une valeur enum valide, la méthode renvoie la valeur enum associée.Paramètres de type générique, Enum Return générique Type

Comment puis-je retourner la valeur enum associée? Erreur de compilation: Impossible de convertir le type 'int?' 'T'

public static T? GetEnumValue<T>(int? value) 
{ 
    if (value == null) 
    { 
     return null; 
    } 

    try 
    { 
     var enumValues = Enum.GetValues(typeof(T)); 

     foreach (object enumValue in enumValues) 
     { 
      if (Convert.ToInt32(enumValue).Equals(value)) 
      { 
       // ERROR: Cannot convert type 'int?' to 'T' 
       return (T)value; 
      } 
     } 
    } 
    catch (ArgumentNullException) 
    { 
    } 
    catch (ArgumentException) 
    { 
    } 
    catch 
    { 
    } 

    return null; 
} 

Merci,

Répondre

1

Trois changements ont fait que ça marche pour moi. Changé le type de retour à Nullabel et ajouté où T: struct (tiré de https://stackoverflow.com/a/209219/455904) et a changé le retour au milieu pour retourner enumValue.

public static Nullable<T> GetEnumValue<T>(int? value) 
     where T : struct 
    { 
     if (value == null) 
     { 
      return null; 
     } 

     try 
     { 
      var enumValues = Enum.GetValues(typeof(T)); 

      foreach (object enumValue in enumValues) 
      { 
       if (Convert.ToInt32(enumValue).Equals(value)) 
       { 
        return (T)enumValue; 
       } 
      } 
     } 
     catch (ArgumentNullException) 
     { 
     } 
     catch (ArgumentException) 
     { 
     } 
     catch 
     { 
     } 

     return null; 
    } 
1

Utilisez la méthode Enum.ToObject au lieu d'utiliser Convert classe.