Verfügt C# über Erweiterungseigenschaften?
Kann ich zum Beispiel eine Erweiterungseigenschaft hinzufügen zu DateTimeFormatInfo
genannt. ShortDateLongTimeFormat
was Folgendes ergeben würde ShortDatePattern + " " + LongTimePattern
?
Verfügt C# über Erweiterungseigenschaften?
Kann ich zum Beispiel eine Erweiterungseigenschaft hinzufügen zu DateTimeFormatInfo
genannt. ShortDateLongTimeFormat
was Folgendes ergeben würde ShortDatePattern + " " + LongTimePattern
?
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 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.
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#senum
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.0 Stimmen
Obwohl es, wie viele gesagt haben, derzeit keine Pläne gibt, dies in die Sprache aufzunehmen, gibt es keinen Grund, warum dies nicht möglich sein sollte. Die Tatsache, dass F# nicht nur Erweiterungseigenschaften, sondern auch statische Erweiterungen hat, beweist für mich, dass es zumindest eine gute Idee ist.
2 Stimmen
Es sollte eine gemacht werden