? Estoy escribiendo algún código de validación. El código tomará los datos pasados a un servicio web y decidirá si puede hacer la acción, o devolverá un mensaje a la persona que llama diciendo que se saltaron algunos campos, etc.¿Cómo trato con matrices usando la reflexión
Lo tengo funcionando principalmente, excepto por las matrices. Estoy marcando las propiedades con un atributo [RequiredField] para representar los campos que se requieren. Entonces, si estos son algunos de mis datos,
public enum EnumTest
{
Value1,
Value2
}
[DataContract]
public class DummyWebserviceData
{
[DataMember]
[RequiredField]
public EnumTest[] EnumTest{ get; set; }
[DataMember]
[RequiredField]
public DummyWebserviceData2[] ArrayOfData { get; set; }
}
[DataContract]
public class DummyWebserviceData2
{
[DataMember]
[RequiredField]
public string FirstName { get; set;}
[DataMember]
[RequiredField]
public string LastName { get; set;}
[DataMember]
public string Description { get; set;}
}
¿Qué tengo trabajando? Tengo validación de fechas y cadenas funcionando. Utiliza recursividad para llegar a cualquier nivel requerido en los datos.
Pero ... ¿y qué hay de las dos matrices allí? El primero es una matriz de enumeraciones. Quiero comprobar en ese caso que la matriz no está vacía.
El segundo es la matriz de valores DummyWebserviceData2. Necesito sacar cada valor y echarle un vistazo individualmente.
Para simplificar el código que he escrito se ve algo como esto,
foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
{
if (propertyInfo.PropertyType.IsArray)
{
// this craps out
object[] array = (object[])propertyInfo.GetValue(data, new object[] { 0 });
}
}
Por lo tanto, me parece que lo primero es que yo puedo decir que es una matriz. ¿Pero cómo puedo saber cuántos elementos hay en la matriz?
Solo tenga en cuenta que no puede usar la implementación de la interfaz IList o ICollection para modificar el contenido de la matriz, como dice el tema MDSN antes mencionado. Todos arrojan 'NotSupportedException' –
Correcto. Investigué y encontré muchas de las mismas cosas que mencionas arriba. Lo que sí me aseguré es que el rango de la matriz es de hecho 1. De lo contrario, la matriz podría ser Array [] []. Gracias por tu ayuda. Muy apreciado. – peter
+1 para la sugerencia 'Cast()'. 'MyType [] a = ((Array) propertyInfo.GetValue (data)). Cast() .ToArray();' –