所以我有一个替换功能,看起来像这样:
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("DeeperSkyBlue", "0066CC");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("DeepSkyBlue", "3366FF");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("SkyBlue", "99CCFF");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("Yellow", "FFFF00");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("DarkTurquoise", "0066CC");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("Salmom", "FF8080");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("LightBlue", "3366FF");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("LightPurple", "CC99FF");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("DarkBlue", "000080");
PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("DarkOrange", "FF9900");
在代码中,我看到了这个"替换"执行了9次,而9的唯一不同之处是"属性"。
我想知道是否有办法动态更改属性,所以我只编写一次替换代码,但更改了9个不同的属性?
答案 0 :(得分:2)
创建变量以缩短代码并复制/粘贴作业:
var eai = EventArgs.InterfaceInsideEventArg[index];
var eaz = EventArgs.InterfaceInsideEventArg[z];
eai.PropertyInsideInterface = eaz.PropertyInsideInterface.Replace("DeeperSkyBlue", "0066CC");
eai.{prop2} = eaz.{prop2}.Replace("DeeperSkyBlue", "0066CC");
//etc.
你可以通过按名称获取每个属性,循环和执行分配来使用反射,但是:
答案 1 :(得分:0)
丑陋,但你可以使用一个函数和2个委托(假设你的变量属性都是string
)
public void DoIt(Action<string> set, Func<string> get)
{
set(get());
}
使用
var e = EventArgs.InterfaceInsideEventArg[index];
DoIt(s => e.PropertyInsideInterface = s,
() => e.PropertyInsideInterface.Replace("DeeperSkyBlue", "0066CC"));
DoIt(s => e.SomeOtherProperty = s,
() => e.SomeOtherProperty.Replace("DeeperSkyBlue", "0066CC"));
让我们列举与@DStanley
相同的风向标的优点/缺点总的来说,略好于原版,但为了简洁,我可能会坚持使用原始副本/粘贴4次。