Без того, чтобы ваш FileLoader фактически переписывал сам себя, а затем использовал Reflection для доступа к вновь созданным свойствам, на самом деле это не способ сделать это. (Полностью игнорируйте этот ответ, если вы ищете что-то, что работает во время проектирования / компиляции, а не во время выполнения =)
То, что вы, вероятно, в конечном итоге будете делать, это что-то вроде
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];
}
}
}
Теперь вы можете сделать:
var fileLoader = new FileLoader("path to properties.csv");
foreach(var property in fileLoader.Properties)
{
var propertyValue = fileLoader.GetPropertyValue(property);
}
Конечно, вы можете просто упростить его до загрузки в словарь, который вы возвращаете из метода в FileLoader, но приведенный выше код поддерживает часть "внешнего вида" использования свойств класса FileLoader =)
Редактировать: добавить код "indexer"
Единственное, что может сделать синтаксис более чистым, - это использовать «индексатор», поэтому вы добавили бы в FileLoader следующее:
public string this[string index]
{
if (propertyValues.ContainsKey(propertyName))
{
return propertyValues[propertyName];
}
else
{
return null;
}
}
Тогда код для accessint будет чуть более аккуратным:
var fileLoader = new FileLoader("path to properties.csv");
foreach(var property in fileLoader.Properties)
{
var propertyValue = fileLoader[property];
}