Ich habe die folgenden zwei Methoden in meinem Code, der im Grunde eine ENUM in eine Dictionay von ints und Streichern drehen:Wie erstellt man eine generische Enum-Methode?
public Dictionary<int, string> GetChannelLevels()
{
IEnumerable<ChannelLevel> enumValues = Enum.GetValues(typeof(ChannelLevel)).Cast<ChannelLevel>();
var channelLevels = enumValues.ToDictionary(value => (int)value, value => value.ToString());
return channelLevels;
}
public Dictionary<int, string> GetCategoryLevels()
{
IEnumerable<CategoryLevel> enumValues = Enum.GetValues(typeof(CategoryLevel)).Cast<CategoryLevel>();
var channelLevels = enumValues.ToDictionary(value => (int)value, value => value.ToString());
return channelLevels;
}
Da der Code dieser zwei Methoden im Grunde das gleiche ist, dachte ich, ein generisches Verfahren zum Schreiben die wie folgt aussehen würde:
private Dictionary<int, string> GetEnumDictionary<T>() where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException("T must be an enumerated type");
}
IEnumerable<T> enumValues = Enum.GetValues(typeof(T)).Cast<T>();
var channelLevels = enumValues.ToDictionary(value => /*THIS IS WHERE THE PROBLEM IS*/ (int)value, value => value.ToString());
return channelLevels;
}
Das Problem ist, dass, da C# nicht eine generische enum hat constaints die Methode cann't T als enum erkennen und deshalb cann't ich convery in int.
Wie kann ich dieses Problem lösen, ohne eine neue Funktion zu schreiben?
Warum möchten Sie eine generische Methode, wenn Sie am Ende * Casting *? In jedem Fall sind alle enums Instanzen des [System.Enum] (https://docs.microsoft.com/en-us/dotnet/api/system.enum?view=netframework-4.7.1) type –
Mögliche Duplikate von [Enum zu Dictionary C#] (https://stackoverflow.com/questions/5583717/enum-to-dictionary-c-sharp) –
@JamesThorpe danke für den Link. Ich denke, dass ich das Problem lösen kann, indem ich die Funktion so –