Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态属性变化#_C#_Asp.net - Fatal编程技术网

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.
您可以通过按名称获取每个属性、循环并执行赋值来使用反射,但是:

  • 这将是任何更少的代码
  • 写的时间比复制/粘贴的时间长
  • 你得彻底检查一下
  • 这将更难调试
  • 你失去了类型安全
  • 如果任何属性名称(或类型)发生更改,直到运行时,您才知道代码已损坏

与sin一样难看,但您可以使用一个函数和两个委托(假设您的变量属性都是
string

让我们列举一下@DStanley的优点/缺点

  • 它的代码稍微少一点
  • 很难立即看到发生了什么
  • 不需要太多测试,代码基本上与原始代码相同
  • 调试起来比原来的稍微困难一些
  • 维护类型安全
  • 代码在编译时被检查
因此,总体而言,略好于原件,但为了方便起见,我可能会坚持原稿复制/粘贴4次

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"));