WPF:我应该如何重构这个C#项目?

时间:2015-02-10 23:15:49

标签: c# wpf visual-studio-2013 refactoring

问题

我创造了一个怪物。 169个列表,169个复选框,169个语句。这很糟糕,我想重构它。

这是一些伪代码来证明:

XAML

<checkbox Name="CheckBox1"...
// etc
<checkbox Name="CheckBox169"/>

代码

List<ulong> masterList = big_array_of_ulongs;
List<ulong> list1 = array_of_ulongs;
List<ulong> list2 = array_of_ulongs;
// etc
List<ulong> list169 = array_of_ulongs;

// if listX and masterList contain a duplicate element...
// ...listX's corresponding CheckBox is checked.
if (masterList.Any(x => list1.Contains(x))
{
  CheckBox1.IsPressed = true;
}

if(masterList.Any(x => list2.Contains(x))
{
  CheckBox2.IsPressed = true;
}
// etc
if(masterList.Any(x => list169.Contains(x))
{
  CheckBox169.IsPressed = true;
}

解吗

我试图将这个混乱减少到几个函数,但我找不到将每个列表与其对应的CheckBox相关联的方法。

非常感谢您的帮助,或者如果您有更好的主意,请分享,谢谢!

1 个答案:

答案 0 :(得分:1)

如果这是相同的代码,你想要一个快速的重构......

for(int i = 1; i < 170; ++i)
{
 String tempName1 = "list" + i;
 List<ulong> temp1 = (List<ulong>)this.GetType().GetProperty(tempName1).GetValue(this, null);
 if (masterList.Any(x => temp1.Contains(x))
 {
  String tempName2 = "CheckBox" + i;
  CheckBox temp2 = (CheckBox)this.GetType().GetProperty(tempName2).GetValue(this, null);
  temp2.IsPressed = true;
 }
}

如果您希望使代码更易于阅读,使用它,效率更低,但仅使用169次迭代并不重要