una recorrer que propiedades propiedad programacion obtener objeto net esperaba entre diferencia declarar como clase campo atributos agregar acceso c# properties loops

que - recorrer propiedades de una clase c#



C#Iterar a través de las propiedades de Clase (3)

Posiblemente puedas usar Reflection para hacer esto. Por lo que yo entiendo, podrías enumerar las propiedades de tu clase y establecer los valores. Tendrás que probar esto y asegurarte de que entiendes el orden de las propiedades. Consulte esta documentación de MSDN para obtener más información sobre este enfoque.

Para una pista, podrías hacer algo como:

Record record = new Record(); PropertyInfo[] properties = typeof(Record).GetProperties(); foreach (PropertyInfo property in properties) { property.SetValue(record, value); }

Donde value es el valor en el que desea escribir (por lo tanto, desde su matriz resultItems ).

Actualmente estoy configurando todos los valores de mi objeto de clase Record .

Este es el código que estoy usando para completar el registro en este momento, propiedad por propiedad.

// Loop through each field in the result set for (int i = 0; i <= resultItems.Length; i++) { Record newRecord = new Record() { itemtype = resultItems[i - (fieldCount - 0)], itemdesc = resultItems[i - (fieldCount - 1)], prodcode = resultItems[i - (fieldCount - 2)], proddesc = resultItems[i - (fieldCount - 3)], curstat = resultItems[i - (fieldCount -4)], totfree = resultItems[i - (fieldCount -5)], totphys = resultItems[i - (fieldCount -6)], pcolgroup = resultItems[i - (fieldCount -7)], scolgroup = resultItems[i - (fieldCount -8)], totpo = resultItems[i - (fieldCount - 9)], totso = resultItems[i - (fieldCount - 10)], quality = resultItems[i - (fieldCount - 11)], statusdesc = resultItems[i - (fieldCount - 12)], groupcode = resultItems[i - (fieldCount - 13)], qualitydes = resultItems[i - (fieldCount - 14)], pcoldesc = resultItems[i - (fieldCount - 15)], scoldesc = resultItems[i - (fieldCount - 16)], pgroupdesc = resultItems[i - (fieldCount - 17)], }; }

¿Puedo iterar a través de cada una de las propiedades de forma dinámica sin codificar todos los nombres de las propiedades?

Algo así:

// Create new Record instance Record newRecord = new Record(); for (int e = 0; e < propertyCount.Length - 1; e++) { newRecord[fieldname] = resultItems[i - (fieldCount - e)]; }


Sí, podría crear un indizador en su clase de registro que haga corresponder el nombre de la propiedad con la propiedad correcta. Esto mantendría todo el enlace del nombre de la propiedad a la propiedad en un lugar, por ejemplo:

public class Record { public string ItemType { get; set; } public string this[string propertyName] { set { switch (propertyName) { case "itemType": ItemType = value; break; // etc } } } }

Alternativamente, como otros han mencionado, use la reflexión.


// the index of each item in fieldNames must correspond to // the correct index in resultItems var fieldnames = new []{"itemtype", "etc etc "}; for (int e = 0; e < fieldNames.Length - 1; e++) { newRecord .GetType() .GetProperty(fieldNames[e]) .SetValue(newRecord, resultItems[e]); }