2011-03-29 30 views
5

Al usar la reflexión en C#, se espera que pase un objeto [] de los parámetros que se emiten más tarde, tengo una interfaz gráfica de usuario que permite al usuario ingresar los valores de los parámetros. Sé qué tipo de entrada son se espera que ingrese, int, string, float, instancia de objeto personalizado, etc ... En el caso de que el argumento sea una matriz de algún tipo, int [] foo [], le permite al usuario construir una matriz de ese tipo, y agregar/eliminar elementos.Creando una matriz de tipo desconocido. C#

Lo que no sé es cómo puedo usar la información (sé que el tipo de datos es de tipo t). ¿Cómo puedo construir una matriz t [], de modo que cuando se le da invocar, puede convertir a ese tipo de matriz.

Por ejemplo, ahora si tengo una función que requiere una matriz de enteros como argumento, actualmente estoy pasando un objeto [] con otro objeto [] dentro que está lleno de números enteros, pero no puede simplemente lanzar el objeto [] a int [] para que la invocación falle.

no puedo escribir un caso interruptor ya que no es posible predecir todos los tipos posibles que podría ser (instancias de alguna otra clase definida en un archivo DLL cargado, por ejemplo)

Respuesta

12

¿Está buscando una Array.CreateInstance? Eso es útil si solo conoce el tipo dinámicamente. Si lo conoce estáticamente pero dentro de un método genérico, puede simplemente usar new T[10] o cualquiera que sea el nombre del parámetro de tipo.

+2

+1 jeez = ¡O pregunta fue hecha en '14: 29: 01Z', respondida en' 14: 29: 42Z'! – gideon

+0

Bueno, soy nuevo aquí, así que no tengo la reputación suficiente para hacerte votos, pero sí. Esto es _exactamente_ lo que necesitaba. ¡Muchas gracias! –

+0

@Steven: A esta hora del día, el voto a favor es irrelevante para mí, pero se agradece la aceptación, gracias :) –

0

Esto no responde la pregunta, pero creo que podría ser un consejo digno de mención.

Si se trata de un método que se puede llamar pasando una matriz de int, así como una matriz de object, parece que está implementando un comportamiento sin tipo que puede expresarse mediante genéricos.

Sugiero que lo cambie a un método genérico usando IEnumerable<T>. Por supuesto, IEnumerable<T> no se puede acceder por índice (mientras que la matriz puede), pero no estoy seguro de que esto es lo que realmente necesita.

Junto con MakeGenericType, puede darle la flexibilidad que necesita.

Cuestiones relacionadas