Ich habe zwei Objekte, und ich möchte, dass sie fusionieren:Was ist der beste Weg, um zwei Objekte zur Laufzeit mit C# zusammenzuführen?
public class Foo
{
public string Name { get; set; }
}
public class Bar
{
public Guid Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public string Property4 { get; set; }
}
zu erstellen:
public class FooBar
{
public string Name { get; set; }
public Guid Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public string Property4 { get; set; }
}
Ich werde nur die Struktur von Foo zur Laufzeit kennen. Bar kann zur Laufzeit ein beliebiger Typ sein. Ich hätte gerne eine Methode, die einen Typ bekommt und diesen Typ mit Foo kombiniert. Im obigen Szenario wurde der Methode zur Laufzeit ein Bar-Typ zugewiesen und ich habe ihn mit Foo kombiniert.
Was wäre der beste Weg, dies zu tun? Kann es mit LINQ Expressions gemacht werden oder muss ich es dynamisch generieren oder gibt es einen anderen Weg? Ich lerne immer noch den neuen LINQ-Namespace in C# 3.0, entschuldige also die Ignoranz, wenn es nicht mit LINQ Expressions gemacht werden kann. Dies ist auch das erste Mal, dass ich jemals so etwas Dynamisches mit C# machen musste, also bin ich mir nicht sicher, welche Möglichkeiten mir zur Verfügung stehen.
Danke für alle Optionen gegeben.
EDIT
Dies ist ausschließlich für die Meta-Informationen an die für die Serialisierung mir gegeben Typ hinzufügen. In diesem Szenario bleiben die Objekte des Benutzers vor der Serialisierung über die Metadaten, die hinzugefügt werden müssen, unwissend. Ich habe mir zwei Möglichkeiten ausgedacht, bevor ich diese Frage gestellt habe, und ich wollte nur sehen, ob es noch mehr gibt, bevor ich mich entscheide, welche ich verwenden soll.
Die beiden Optionen, die ich gekommen bin mit sind:
die serialisierte Zeichenfolge des mir gegebenen Typs Manipulieren, nachdem es Serialisierung durch die Meta-Informationen hinzuzufügen.
Wrapping die Art, die mir gegeben, die ähnlich wie @ Zxpro erwähnt, aber meine differierte leicht, was in Ordnung ist. Es wird nur macht den Anwender meiner API, um die Konvention zu folgen, was keine schlechte Sache ist, da jeder über Konvention über Konfiguration ist:
public class Foo<T>
{
public string Name { get; set; }
public T Content { get; set; }
}
EDIT
Vielen Dank aller für ihre Antworten. Ich entschied mich dafür, das Objekt wie oben beschrieben zu umhüllen und gab die Antwort an @Zxpro, da eine Mehrheit diesen Ansatz ebenfalls mochte.
Wenn jemand anderes auf diese Frage kommt, zögern Sie nicht zu posten, wenn Sie denken, dass es einen besseren Weg geben könnte.
Dies wäre eine ideale Lösung, aber es würde kompilieren Zeit Kenntnisse von Bar, die der ursprüngliche Fragesteller angegeben hat nur zur Laufzeit verfügbar. – Randolpho
@Randalpho: Vielleicht, vielleicht nicht. Es ist vielleicht nicht bekannt * in diesem Kontext *, aber es kann gut möglich sein, abhängig von der Architektur ein generisches zu verwenden. –
Ich habe darüber nachgedacht und das ist mein Rückfallplan, wenn das nicht einfach und performant gemacht werden kann. Meine unterschied sich jedoch leicht. Öffentlich machen Foo {öffentliche Zeichenfolge Name {get; einstellen; } public T Inhalt {get; einstellen; }} –