基本上,我有一个系统,其中我的数据网格使用新的背景色标记已更改的单元格,为此,我在包含这些属性的对象中有一个方法,该方法接收一个字符串,该字符串是要检查的属性的名称,然后是使用该字符串检查正确属性的switch语句。
public Color HasChanged(string value)
{
switch (value)
{
case "CILRef":
if (_localShipment.cilRef != _originalShipment.cilRef)
{
return Colors.SkyBlue;
}
else
{
return Colors.White;
}
case "ArrivedAtPortDate":
if (_localShipment.arrivedAtPortDate != _originalShipment.arrivedAtPortDate)
{
return Colors.SkyBlue;
}
else
{
return Colors.White;
}
}
}
为了简洁起见,我删除了其余的属性。
现在,我the不休地感觉到,有一种更清洁的方法可以在不使用switch语句的情况下执行此string> property,但是我一生无法在google上找到任何东西,如果没有一些关键字就很难进行搜索。
我还试图仅保存那些已更改的属性,我将把所有更改的属性名称放入数组中,然后使用另一个switch语句进行循环,该语句检查该数组,然后保存正确的属性。但是,这对我来说似乎还不整齐。
有没有更清洁的解决方案,希望它可以处理新属性的添加,而无需在switch语句中添加新代码。
如果需要,我可以包括执行此检查的其余代码(即,在数据网格上的WPF绑定,以及一个将属性名称作为字符串参数调用检查方法的转换器)。
您可以编写一个扩展方法,例如:
public static object GetPropValue(this object o, string propName)
{
return o.GetType().GetProperty(propName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase)
.GetValue(o);
}
并使用它
if(localShipment.GetPropValue(value).Equals(originalShipment.GetPropValue(value)))
{
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句