qué objetos método dinamicamente crear c# silverlight reflection anonymous-objects

método - crear objetos en c#



Crear un objeto anónimo por reflexión en C# (6)

Es posible que desee examinar el DLR. Todavía no lo he hecho (todavía) pero el caso de uso para el DLR (lenguajes dinámicos) se parece mucho a lo que estás tratando de hacer.

Dependiendo de lo que quieras hacer, el objeto proxy dinámico de Castle-framework también podría ser una buena opción.

¿Hay alguna forma de crear un objeto anónimo C # 3.0 a través de Reflection en tiempo de ejecución en .NET 3.5? Me gustaría apoyarlos en mi esquema de serialización, así que necesito una forma de manipularlos programáticamente.

editado más tarde para aclarar el caso de uso

Una restricción adicional es que voy a ejecutar todo dentro de una aplicación de Silverlight, por lo que los tiempos de ejecución adicionales no son una opción, y no estoy seguro de cómo funcionará la generación de código sobre la marcha.


Puede usar Reflection.Emit para generar las clases requeridas dinámicamente, aunque es bastante desagradable codificar.

Si decide utilizar esta ruta, le sugiero que descargue Reflection Emit Language Addin para .NET Reflector , ya que esto le permite ver cómo se construirían las clases existentes utilizando Reflection.Emit, de ahí que sea un buen método para aprender este rincón del framework.


Sí hay. De memoria:

public static T create<T>(T t) { return Activator.CreateInstance<T>(); } object anon = create(existingAnonymousType);


Utilice la reflexión para obtener el tipo, use GetConstructor en el tipo, use Invoke en el constructor.

Editar: Gracias a Sklivvz por señalar que respondí una pregunta que no se hizo;)

La respuesta a la pregunta real: he descubierto que generar código C # y luego usar CodeDomProvider (pero no CodeDOM en sí mismo - terrible) y luego compilarlo y reflejar los tipos de eso es la manera más fácil de hacer objetos "anónimos" en tiempo de ejecución


Aquí hay otra manera, parece más directa.

object anon = Activator.CreateInstance(existingObject.GetType());


También es posible que desee echar un vistazo a la clase FormatterServices: entrada de MSDN en FormatterServices

Contiene GetSafeUninitializedObject que creará una instancia vacía de la clase y varios otros métodos útiles al hacer la serialización.

En respuesta al comentario de Michael: si no tiene la instancia de Tipo para el tipo T, siempre puede obtenerla de typeof (T). Si tiene un objeto de un tipo desconocido, puede invocar GetType () para obtener la instancia de Tipo.