0

有什么解决方案可以简化此代码吗?我只想在几个相同类型的对象中设置相同的属性。这些对象是 Windows 8 应用程序中的文本框。我认为这可能与 Array 和 foreach 相关...但不确定谢谢

private void makeVisible(int x)
        {
            if (x == 1)
            {
                field2.Visibility = Visibility.Visible;
                field3.Visibility = Visibility.Visible;
                field4.Visibility = Visibility.Visible;
                field6.Visibility = Visibility.Visible;
                field8.Visibility = Visibility.Visible;
                field9.Visibility = Visibility.Visible;
                field11.Visibility = Visibility.Visible;
            }

            if (x == 0)
            {
                field2.Visibility = Visibility.Collapsed;
                field3.Visibility = Visibility.Collapsed;
                field4.Visibility = Visibility.Collapsed;
                field6.Visibility = Visibility.Collapsed;
                field8.Visibility = Visibility.Collapsed;
                field9.Visibility = Visibility.Collapsed;
                field11.Visibility = Visibility.Collapsed;
                errorReporter.Visibility = Visibility.Collapsed;
            }
        }
4

4 回答 4

1

您至少可以做以下事情:

var visibility = x == 0 ? Visibility.Collapsed : Visibility.Visible;

field2.Visibility = visible;
field3.Visibility = visible;
// etc

如果您想使用数组,您甚至可以执行以下操作,但我不确定这是否是一种改进:

foreach (var obj in new[] { field1, field2, field3 ... })
{
    obj.Visibility = x == 0 ? Visibility.Collapsed : Visibility.Visible;
}
于 2013-06-25T15:01:33.263 回答
0
List<MyFieldType> fields=new List<MyFieldType> {field2, field3, field4, field6, field8, field9, field11};

foreach(MyFieldType field in fields)
   {
   if(x==1)
      {
      field.Visibility=Visibility.Visible;
      }
   else if(x==0)
      {
      field.Visibility=Visibility.Collapsed;
      }
   }

使用集合来存储您的对象并对其进行迭代。

于 2013-06-25T15:02:27.480 回答
0
private void makeVisible(int x)
{
    var boxes = new TextBox[] { field2, field3... };
    foreach (TextBox box in boxes)
    {
        box.Visibility = (x == 1) ? Visibility.Visible : Visibility.Collapsed;
    }

    if (x == 0)
    {
        errorReporter.Visibility = Visibility.Collapsed;
    }
}
于 2013-06-25T15:00:32.450 回答
-1

您肯定需要循环遍历上面回答的元素,但您不必手动构建列表,用于Reflection简化此操作:

this.GetType().GetProperties().Where(pi=>pi.PropertyType == typeof(TextBox))
于 2013-06-25T15:33:10.490 回答