Para hacer específicamente lo que estás preguntando, deberás usar el reflejo (mientras etiquetaste tu pregunta) para hacerlo. Eche un vistazo a la clase PropertyInfo
. No estoy del todo seguro de lo que el código está haciendo, pero un ejemplo general de establecer un valor de propiedad reflexiva seria:
object targetInstance = ...; // your target instance
PropertyInfo prop = targetInstance.GetType().GetProperty(propertyName);
prop.SetValue(targetInstance, null, newValue);
Podría, sin embargo, pasar una Action<T>
lugar, si conoce la propiedad en algún momento en el código. Por ejemplo:
YourType targetInstance = ...;
Action<PropertyType> prop = value => targetInstance.PropertyName = value;
... // in your consuming code
prop(newValue);
O, si se conoce el tipo cuando lo llaman, pero no tiene la instancia, podría hacer que sea un Action<YourType, PropertyType>
. Esto también evitaría crear un cierre.
Action<YourType, PropertyType> prop = (instance, value) => instance.PropertyName = value;
... // in your consuming code
prop(instance, newValue);
Para que esto sea totalmente genérico ("genérico", como en "no específica", no como en los genéricos), es probable que tenga para que sea una Action<object>
y echarlo al tipo de propiedad adecuada dentro de la lambda, pero esto debería funcionar de cualquier manera.
Por cierto, sé que puedo hacer esto: mapeo var = new Dictionary> { {0, t => t.myProperty = StripQuotes (fields [0])} } Pero no me gusta esa solución –
¿Puede decirnos * por qué * no le gusta esa solución? –
No quiero poner la funcionalidad dentro del mapa, solo el concepto de "esta es la propiedad para operar en este índice". La lógica de cómo obtener el valor del campo se repetiría en cada entrada del diccionario con el ejemplo que di. –