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]);
}