Tengo dos objetos y quiero unirlos:¿Cuál es la mejor manera de unir dos objetos durante el tiempo de ejecución usando 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; }
}
crear:
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; }
}
sólo conocerán la estructura de Foo en tiempo de ejecución. Bar puede ser de cualquier tipo en tiempo de ejecución. Me gustaría tener un método al que se le dé un tipo y combine ese tipo con Foo. Por ejemplo, el escenario anterior, el método recibió un tipo de barra en tiempo de ejecución y lo combiné con Foo.
¿Cuál sería la mejor manera de hacerlo? ¿Se puede hacer utilizando LINQ Expressions o tengo que generarlo dinámicamente o hay otra manera? Todavía estoy aprendiendo el nuevo espacio de nombres LINQ en C# 3.0, así que disculpe la ignorancia si no se puede hacer utilizando expresiones LINQ. Esta es también la primera vez que tengo que hacer algo dinámico como este con C#, así que no estoy seguro de todas las opciones que tengo disponibles.
Gracias por cualquier opción.
EDITAR
Esto es estrictamente para añadir información de metadatos para el tipo que me ha dado para la serialización. Este escenario evita que los objetos del usuario ignoren la metainformación que debe agregarse, antes de que se serialice. He encontrado dos opciones antes de hacer esta pregunta y solo quería ver si había más, antes de decidir cuál usar.
Las dos opciones que he llegado con son:
La manipulación de la cadena serializada del tipo dado a mí después de la serialización de que, mediante la adición de la meta-información.
Envolviendo el tipo que me dieron, que es similar a lo que @Zxpro mencionó, pero el mío difiere ligeramente, lo cual está bien. Se acaba de hacer que el usuario de mi API tiene que seguir la convención, que no es una mala cosa, porque todo el mundo está a punto convención sobre configuración:
public class Foo<T>
{
public string Name { get; set; }
public T Content { get; set; }
}
EDITAR
Gracias a todo el mundo por sus respuestas. Decidí envolver el objeto como arriba y di la respuesta a @Zxpro, ya que a la mayoría también le gustaba ese enfoque.
Si alguien más se encuentra con esta pregunta, no dude en publicar, si cree que podría haber una manera mejor.
Esta sería una solución ideal, pero requeriría conocimiento en tiempo de compilación de Bar, que el asker original ha declarado que solo está disponible en tiempo de ejecución. – Randolpho
@Randalpho: Tal vez, tal vez no. Puede que no se sepa * en ese contexto *, pero puede ser posible, dependiendo de la arquitectura, usar un genérico. –
He pensado en eso y ese es mi plan de retroceso, si esto no se puede hacer de manera fácil y efectiva. Sin embargo, el mío era un poco diferente. Básicamente haciendo público Foo {public string Name {get; conjunto; } public T Content {get; conjunto; }} –