54 Stimmen

Enumerationserweiterungsmethoden

In vs2008 ist es möglich, eine Erweiterungsmethode zu schreiben, die auf jede Enumeration angewendet wird.

Ich weiß, dass man Erweiterungsmethoden gegen eine bestimmte Enumeration schreiben kann, aber ich möchte in der Lage sein, jede Enumeration mit einer einzelnen Erweiterungsmethode zu verwenden. Ist das möglich?

2voto

Esge Punkte 170

Manchmal besteht die Notwendigkeit, von einem Enum auf ein anderes zu konvertieren, basierend auf dem Namen oder Wert des Enums. So kann es schön mit Erweiterungsmethoden gemacht werden:

enum Enum1 { One = 1, Two = 2, Three = 3 };
enum Enum2 { Due = 2, Uno = 1 };
enum Enum3 { Two, One };

Enum2 e2 = Enum1.One.ConvertByValue();
Enum3 e3 = Enum1.One.ConvertByName();
Enum3 x2 = Enum1.Three.ConvertByValue();

public static class EnumConversionExtensions
{
    public static T ConvertByName(this Enum value)
    {
        return (T)Enum.Parse(typeof(T), Enum.GetName(value.GetType(), value));
    }

    public static T ConvertByValue(this Enum value)
    {
        return (T)((dynamic)((int)((object)value)));
    }
}

1voto

Bronek Punkte 9976

Ein weiteres Beispiel für die Erweiterung von Enum - aber diesmal gibt es den Eingabetyp des Enums zurück.

public static IEnumerable toElementsCollection(this T value) where T : struct, IConvertible
    {
        if (typeof(T).IsEnum == false) throw new Exception("typeof(T).IsEnum == false");

        return Enum.GetValues(typeof(T)).Cast();
    }

Beispiel für die Verwendung:

public enum TestEnum { A,B,C };

TestEnum.A.toElementsCollection();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X