Sin tener que actualizar su "FileLoader", y luego usar Reflection para acceder a las propiedades recién creadas, no hay manera de hacerlo.(Completley ignorar esta respuesta si buscas algo que funciona en Design/Tiempo de compilación, en lugar de en tiempo de ejecución =)
Lo que probablemente va a terminar haciendo es tener algo así como
public class FileLoader
{
// ... Other code for FileLoader goes here
public FileLoader(string propertiesFileNameAndPath)
{
// Load values from propertiesFile into _properties/_propertyValues
}
private _properties = new List<string>();
private _propertyValues = new Dictionary<string, string>();
public string[] Properties
{
// returning as an array stops your _properties being modified
return _properties.ToArray();
}
public void UpdateProperty(string propertyName, string propertyValue)
{
if (propertyValues.ContainsKey(propertyName))
{
propertyValues[propertyName] = propertyValue;
}
}
public string GetPropertyValue(string propertyValue)
{
if (propertyValues.ContainsKey(propertyName))
{
return propertyValues[propertyName];
}
}
}
Ahora puede hacer:
var fileLoader = new FileLoader("path to properties.csv");
foreach(var property in fileLoader.Properties)
{
var propertyValue = fileLoader.GetPropertyValue(property);
}
por supuesto, usted podría simplificarlo hasta cargarlo en un diccionario que regrese de un método de FileLoader, pero el código anterior mantiene parte de la "aparición" de la utilización de propiedades de la FileLoader clase =)
edición: Añadir "paso a paso" código
Una cosa que podría hacer que el limpiador de la sintaxis sería el uso de un "paso a paso", por lo que añadiría lo siguiente para FileLoader:
public string this[string index]
{
if (propertyValues.ContainsKey(propertyName))
{
return propertyValues[propertyName];
}
else
{
return null;
}
}
a continuación, el código para accessint sería el un poco más ordenado:
var fileLoader = new FileLoader("path to properties.csv");
foreach(var property in fileLoader.Properties)
{
var propertyValue = fileLoader[property];
}
Escriba una plantilla T4 que genere un archivo .cs dado el .csv. –
posible duplicado de [¿Cómo creo propiedades dinámicas en C#?] (Http://stackoverflow.com/questions/947241/how-do-i-create-dynamic-properties-in-c) – nawfal