C# 动态属性变化#
因此,我有一个函数,它可以进行如下替换:C# 动态属性变化#,c#,asp.net,C#,Asp.net,因此,我有一个函数,它可以进行如下替换: PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPointDataList[index].property.Replace("DeeperSkyBlue", "0066CC"); PowerPointEventArg.powerPointDataList[index].property = PowerPointEventArg.powerPoi
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个不同的属性 创建变量以缩短代码并复制/粘贴分配:
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.
您可以通过按名称获取每个属性、循环并执行赋值来使用反射,但是:
- 这将是任何更少的代码
- 写的时间比复制/粘贴的时间长
- 你得彻底检查一下
- 这将更难调试
- 你失去了类型安全
- 如果任何属性名称(或类型)发生更改,直到运行时,您才知道代码已损坏
string
)
让我们列举一下@DStanley的优点/缺点
- 它的代码稍微少一点
- 很难立即看到发生了什么
- 不需要太多测试,代码基本上与原始代码相同
- 调试起来比原来的稍微困难一些
- 维护类型安全
- 代码在编译时被检查
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"));