944 Stimmen

Verfügt C# über Erweiterungseigenschaften?

Verfügt C# über Erweiterungseigenschaften?

Kann ich zum Beispiel eine Erweiterungseigenschaft hinzufügen zu DateTimeFormatInfo genannt. ShortDateLongTimeFormat was Folgendes ergeben würde ShortDatePattern + " " + LongTimePattern ?

21 Stimmen

Ich wollte eine Erweiterungsmethode namens IsNull für Nullable<T> hinzufügen, die einfach ! HasValue zurückgibt. .IsNull() ist auf jeden Fall weniger hübsch als .IsNull

1 Stimmen

Ich finde dies nützlich für trinäre Operatoren ?

2 Stimmen

Ich wollte, dass dies die Java's enum s, die Eigenschaften und Methoden haben können. C#s enum s können keine Eigenschaften oder Methoden haben, aber Sie puede Erweiterungsmethoden für sie erstellen. Diese Frage war nützlich für mich, und sollte nicht geschlossen werden.

2voto

Psyonity Punkte 44

Da ich dies vor kurzem brauchte, habe ich mir die Quelle der Antwort angesehen:

c# Klasse durch Hinzufügen von Eigenschaften erweitern

und eine dynamischere Version erstellt:

public static class ObjectExtenders
{
    static readonly ConditionalWeakTable<object, List<stringObject>> Flags = new ConditionalWeakTable<object, List<stringObject>>();

    public static string GetFlags(this object objectItem, string key)
    {
        return Flags.GetOrCreateValue(objectItem).Single(x => x.Key == key).Value;
    }

    public static void SetFlags(this object objectItem, string key, string value)
    {
        if (Flags.GetOrCreateValue(objectItem).Any(x => x.Key == key))
        {
            Flags.GetOrCreateValue(objectItem).Single(x => x.Key == key).Value = value;
        }
        else
        {
            Flags.GetOrCreateValue(objectItem).Add(new stringObject()
            {
                Key = key,
                Value = value
            });
        }
    }

    class stringObject
    {
        public string Key;
        public string Value;
    }
}

Es kann wahrscheinlich stark verbessert werden (Namensgebung, dynamisch statt String), ich verwende dies derzeit in CF 3.5 zusammen mit einer hacky ConditionalWeakTable ( https://gist.github.com/Jan-WillemdeBruyn/db79dd6fdef7b9845e217958db98c4d4 )

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