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 recorrer cada una de las propiedades dinámicamente 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)];
}
c#
properties
loops
Luke
fuente
fuente
Respuestas:
Posiblemente podría usar Reflection para hacer esto. Por lo que yo entiendo, podría enumerar las propiedades de su clase y establecer los valores. Sin embargo, tendría que probar esto y asegurarse de comprender el orden de las propiedades. Consulte esta documentación de MSDN para obtener más información sobre este enfoque.
Para una pista, posiblemente podría hacer algo como:
¿Dónde
value
está el valor que desea escribir (es decir, de suresultItems
matriz)?fuente
fuente
GetProperty
propiedad no está disponible para mi instancia de clase. : /nameof(Item.Field)
lugar de"itemtype"
evitar la codificación rígida a partir de C # 6.0Sí, puede crear un indexador en su clase Record que se asigne desde el nombre de la propiedad a la propiedad correcta. Esto mantendría toda la vinculación del nombre de la propiedad a la propiedad en un solo lugar, por ejemplo:
Alternativamente, como han mencionado otros, use la reflexión.
fuente
Probé lo que sugirió Samuel Slade . No funcionó para mí. La
PropertyInfo
lista venía vacía. Entonces, probé lo siguiente y funcionó para mí.fuente