Установить одно и то же свойство нескольким одинаковым объектам (а не повторять)?

Есть ли решение, как упростить этот код? Я просто хочу установить одно и то же свойство в нескольких объектах одного типа. Эти объекты являются TextBoxes в приложении 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 ответа

По крайней мере, вы можете сделать следующее:

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;
}


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;
 }
 }
</myfieldtype></myfieldtype>

Используйте коллекцию для хранения ваших объектов и перебора по ней.


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;
 }
}


Вам определенно нужно прокрутить элементы, как было сказано выше, но вам не нужно создавать список вручную, используйте Reflection чтобы упростить это:

this.GetType().GetProperties().Where(pi=>pi.PropertyType == typeof(TextBox))

licensed under cc by-sa 3.0 with attribution.