J'ai deux objets et je veux les fusionner:Quel est le meilleur moyen de fusionner deux objets pendant l'exécution en utilisant C#?
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; }
}
Pour créer:
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; }
}
Je ne connaître la structure de Foo lors de l'exécution. La barre peut être de n'importe quel type à l'exécution. Je voudrais avoir une méthode qui va recevoir un type et combiner ce type avec Foo. Par exemple, le scénario ci-dessus, la méthode a été donné un type de barre à l'exécution et je l'ai combiné avec Foo.
Quelle serait la meilleure façon de faire cela? Peut-il être fait en utilisant des expressions LINQ ou dois-je le générer dynamiquement ou y a-t-il un autre moyen? J'apprends toujours le nouvel espace de noms LINQ dans C# 3.0, donc excusez l'ignorance si cela ne peut pas être fait en utilisant des expressions LINQ. C'est aussi la première fois que je fais quelque chose de dynamique avec C#, donc je ne suis pas sûr de toutes les options dont je dispose.
Merci pour les options indiquées.
EDIT
Ceci est strictement pour ajouter des méta-informations du type qui m'a été donnée pour la sérialisation. Ce scénario empêche les objets de l'utilisateur d'ignorer les métadonnées qui doivent être ajoutées avant d'être sérialisées. J'ai trouvé deux options avant de poser cette question et je voulais juste voir s'il y en avait plus, avant de décider lequel utiliser.
Les deux options que je suis venu avec sont:
la chaîne sérialisée Manipuler du type qui m'a été donné après la sérialisation il, en ajoutant les méta-informations.
Envelopper le type donné à moi, qui est semblable à ce que @Zxpro mentionné, mais le mien différait légèrement, ce qui est bien. Il va juste faire l'utilisateur de mon API doivent suivre la convention, ce qui est une mauvaise chose, puisque tout le monde est sur le point sur la configuration convention:
public class Foo<T>
{
public string Name { get; set; }
public T Content { get; set; }
}
EDIT
Merci à tous pour leurs réponses. J'ai décidé d'emballer l'objet comme ci-dessus et j'ai donné la réponse à @ Zxpro, car une majorité a aussi aimé cette approche.
Si quelqu'un d'autre rencontre cette question, n'hésitez pas à poster, si vous pensez qu'il pourrait y avoir un meilleur moyen.
Ce serait une solution idéale, mais cela nécessiterait une connaissance à la compilation de Bar, que le demandeur d'origine a déclaré être uniquement disponible au moment de l'exécution. – Randolpho
@Randalpho: Peut-être, peut-être pas. Il peut ne pas être connu * dans ce contexte *, mais il pourrait bien être possible, selon l'architecture, d'utiliser un générique. –
J'ai pensé à cela et c'est mon plan de repli, si cela ne peut pas être fait facilement et performant. La mienne différait légèrement cependant. Fondamentalement rendre public Foo {chaîne publique Name {get; ensemble; } public T Content {get; ensemble; }} –