如果不是让你的“FileLoader”程序自己重写并使用反射来访问新创建的属性,实际上没有什么方法可以做到这一点。(如果你想在设计/编译时而不是运行时获得结果,请完全忽略此答案=)
你可能最终会做的是像以下这样的事情:
public class FileLoader
{
public FileLoader(string propertiesFileNameAndPath)
{
}
private _properties = new List<string>();
private _propertyValues = new Dictionary<string, string>();
public string[] Properties
{
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类属性的部分“外观”=)
编辑:添加“索引器”代码
可能会使语法更清晰的一件事是使用“索引器”,因此您可以将以下内容添加到FileLoader中:
public string this[string index]
{
if (propertyValues.ContainsKey(propertyName))
{
return propertyValues[propertyName];
}
else
{
return null;
}
}
然后访问它的代码会更加简洁:
var fileLoader = new FileLoader("path to properties.csv");
foreach(var property in fileLoader.Properties)
{
var propertyValue = fileLoader[property];
}