Das Hinzufügen dynamischer Eigenschaften zu Objekten zur Laufzeit ist in vielen Anwendungen eine häufige Anforderung. Ein gängiger Ansatz hierfür ist die Verwendung eines Wörterbuchs oder einer Parametersammlung. Für Szenarien, in denen die Anzahl und Namen der Eigenschaften vorher unbekannt sind, greift dieser Ansatz jedoch zu kurz.
Das .NET Framework bietet eine integrierte Lösung für dieses Problem: ExpandoObject. Mit dieser Klasse können Sie dynamische Objekte erstellen, denen Sie zur Laufzeit Eigenschaften hinzufügen und entfernen können.
// Create a dynamic object dynamic dynObject = new ExpandoObject(); // Add dynamic properties dynObject.SomeDynamicProperty = "Hello!"; // Execute dynamic actions dynObject.SomeDynamicAction = (msg) => { Console.WriteLine(msg); }; dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);
Für kompliziertere Szenarien möchten Sie möglicherweise Ihre eigene Dynamik erstellen Objekt, das die DynamicObject-Klasse implementiert. Dies gibt Ihnen mehr Kontrolle darüber, wie dynamische Mitgliederanfragen behandelt werden.
public sealed class MyDynObject : DynamicObject { // Member dictionary private readonly Dictionary<string, object> _properties; public MyDynObject(Dictionary<string, object> properties) { _properties = properties; } // Get dynamic member names public override IEnumerable<string> GetDynamicMemberNames() { return _properties.Keys; } // Try to get a dynamic member public override bool TryGetMember(GetMemberBinder binder, out object result) { if (_properties.ContainsKey(binder.Name)) { result = _properties[binder.Name]; return true; } else { result = null; return false; } } // Try to set a dynamic member public override bool TrySetMember(SetMemberBinder binder, object value) { if (_properties.ContainsKey(binder.Name)) { _properties[binder.Name] = value; return true; } else { return false; } } }
Mit diesem Ansatz können Sie dynamische Objekte mit beliebigen gewünschten Eigenschaften erstellen:
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 } }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
Achtung: Beachten Sie bei der Verwendung dynamischer Objekte, dass der Compiler Ihre dynamischen Aufrufe nicht überprüfen kann und es zu Laufzeitfehlern oder einem Mangel an Intellisense kommen kann Unterstützung.
Das obige ist der detaillierte Inhalt vonWie kann ich C#-Eigenschaften zur Laufzeit dynamisch hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!