我正在为我的应用程序编写一个文件通用块,并开始使用Lambda表达式来管理我的规则集以生成块,以避免魔法字符串,配置地狱等陷阱。用lambda表达式读取属性值
在我的映射类我有类似线路:
Map(x => x.Name).Length(20).PadLeft(true).PaddingChar("#");
能正常工作,而不是在我的居住问题,在这里我设置救了我的关于表达的信息是在地图的方法:
public override IPropertyMap Map(Expression<Func<T, object>> expression)
{
var propertyMap = new FixedLengthPropertyMap
{
//Length = 20,
//PaddingCharacter = " ",
PadLeft = false,
PropertyInfo = ReflectionHelper.GetProperty(expression)
};
_properties.Add(propertyMap);
return propertyMap;
}
_properties
只是一个List<IPropertyMap>
存储我的信息,其中从什么是有一个真正的对象的数据可以从属性读过的最好的方式,我的问题目前我想出了一些与此类似:
var map = new AgentMap();
var agent = new Agent {Name = "Bob"};
string output = map.Write(agent);
public override string Write<T>(T agent)
{
var initial = _properties[0];
return initial.PropertyInfo.GetValue(agent, null) as string;
}
是有一种比使用GetValue方法更好的方法,因为之前我使用表达式树?
-1我很害怕看到你的反射帮手。 – asyncwait 2009-08-18 14:49:27