Ich muss zwei dynamische Objekte in C # zusammenführen. Alles, was ich auf Stackexchange gefunden habe, umfasste nur nicht-rekursive Zusammenführung. Aber ich suche nach etwas, das rekursiv oder tief zusammenfließt, sehr ähnlich wie jQuerys $.extend(obj1, obj2)
-Funktion.
Bei Kollision zweier Mitglieder sollten die folgenden Regeln gelten:
IEnumerable
& amp; IEnumberables<T>
werden einfach zusammengeführt (vielleicht .Concat()
?) IDictionary
& amp; IDictionary<TKey,TValue>
werden zusammengeführt; Schlüssel obj1 haben Vorrang vor Kollision Expando
& amp; Expando[]
-Typen müssen rekursiv zusammengeführt werden, während Expando [] immer nur gleichartige Elemente enthält Hier ist ein Beispiel für eine mögliche Zusammenführung:
%Vor%Irgendwelche Ideen wie man das macht?
Richtig, das ist ein bisschen lang, aber sieh es dir an. Es ist eine Implementierung mit Reflection.Emit.
Offenes Problem für mich ist, wie man eine ToString () - Überschreibung implementiert, so dass Sie einen String-Vergleich durchführen können. Kommen diese Werte von einer Konfigurationsdatei oder etwas? Wenn sie im JSON-Format sind, könnte es schlimmer sein, als einen JsonSerializer zu verwenden, denke ich. Kommt drauf an was du willst.
Sie könnten das Expando-Objekt verwenden, um den Reflection.Emit-Unsinn am unteren Rand der Schleife loszuwerden:
%Vor%Ich sehe keinen Weg durch den unordentlichen Code, um den ursprünglichen Objektbaum zu analysieren, aber nicht sofort. Ich würde gerne andere Meinungen dazu hören. Das DLR ist für mich relativ neu.
%Vor%Tags und Links c# merge dynamic c#-4.0 expandoobject