Сокращение этого, если условие - PullRequest
2 голосов
/ 03 февраля 2012

Несколько дней назад я задал вопрос , который может быть немного неясным. Теперь я написал код, который мог бы лучше проиллюстрировать этот вопрос. Пожалуйста, сначала посмотрите на код ниже:

int d;
d = DateTime.Today.Day;
if (d==1)
{
    hyperlinkButton1.Background=new SolidColorBrush(Colors.Black);
}
else if (d==2)
{
    hyperlinkButton2.Background=new SolidColorBrush(Colors.Black);
}
else if (d==3)
{
    hyperlinkButton3.Background=new SolidColorBrush(Colors.Black);
}
else if (d==4)
{
    hyperlinkButton4.Background=new SolidColorBrush(Colors.Black);
}
else if (d==5)
{
    hyperlinkButton5.Background=new SolidColorBrush(Colors.Black);
}
else if (d==6)
{
    hyperlinkButton6.Background=new SolidColorBrush(Colors.Black);
}
else if (d==7)
{
    hyperlinkButton7.Background=new SolidColorBrush(Colors.Black);
}
else if (d==8)
{
    hyperlinkButton8.Background=new SolidColorBrush(Colors.Black);
}
else if (d==9)
{
    hyperlinkButton9.Background=new SolidColorBrush(Colors.Black);
}
else if (d==10)
{
    hyperlinkButton10.Background=new SolidColorBrush(Colors.Black);
}
else if (d==11)
{
    hyperlinkButton11.Background=new SolidColorBrush(Colors.Black);
}
else if (d==12)
{
    hyperlinkButton12.Background=new SolidColorBrush(Colors.Black);
}
else if (d==13)
{
    hyperlinkButton13.Background=new SolidColorBrush(Colors.Black);
}
else if (d==14)
{
    hyperlinkButton14.Background=new SolidColorBrush(Colors.Black);
}
else if (d==15)
{
    hyperlinkButton15.Background=new SolidColorBrush(Colors.Black);
}
else if (d==16)
{
    hyperlinkButton16.Background=new SolidColorBrush(Colors.Black);
}
else if (d==17)
{
    hyperlinkButton17.Background=new SolidColorBrush(Colors.Black);
}
else if (d==18)
{
    hyperlinkButton18.Background = new SolidColorBrush(Colors.Black);
}
else if (d==19)
{
    hyperlinkButton19.Background=new SolidColorBrush(Colors.Black);
}
else if (d==20)
{
    hyperlinkButton20.Background=new SolidColorBrush(Colors.Black);
}
else if (d==21)
{
    hyperlinkButton21.Background=new SolidColorBrush(Colors.Black);
}
else if (d==22)
{
    hyperlinkButton22.Background=new SolidColorBrush(Colors.Black);
}
else if (d==23)
{
    hyperlinkButton23.Background=new SolidColorBrush(Colors.Black);
}
else if (d==24)
{
    hyperlinkButton24.Background=new SolidColorBrush(Colors.Black);
}
else if (d==25)
{
    hyperlinkButton25.Background=new SolidColorBrush(Colors.Black);
}
else if (d==26)
{
    hyperlinkButton26.Background=new SolidColorBrush(Colors.Black);
}
else if (d==27)
{
    hyperlinkButton2.Background=new SolidColorBrush(Colors.Black);
}
else if (d==28)
{
    hyperlinkButton28.Background=new SolidColorBrush(Colors.Black);
}
else if (d==29)
{
    hyperlinkButton29.Background=new SolidColorBrush(Colors.Black);
}
else if (d==30)
{
    hyperlinkButton30.Background=new SolidColorBrush(Colors.Black);
}
else
{ 
    hyperlinkButton31.Background=new SolidColorBrush(Colors.Black);
}

Мой вопрос (как для новичка) заключается в следующем: есть ли способ в C # сократить это условие, заставив приложение определить, какой фон гиперссылки он должен изменить в зависимости от значения d?

Ответы [ 3 ]

4 голосов
/ 03 февраля 2012

Определите массив соответствующих элементов управления и используйте целое число для ввода в массив, помня, что массивы основаны на 0, а не на 1.

var buttons = new [] {
    hyperlinkButton1,
    hyperlinkButton2,
    hyperlinkButton3,
    hyperlinkButton4,
    hyperlinkButton5,
    hyperlinkButton6,
    hyperlinkButton7,
    hyperlinkButton8,
    hyperlinkButton9,
    // ...
}

//.... 

buttons[DateTime.Today.Day-1].Background=new SolidColorBrush(Colors.Black);
3 голосов
/ 03 февраля 2012

Подход на основе массива является хорошей альтернативой на общем уровне множественным операторам if, но, поскольку он также помечен как Silverlight, вам может быть интересно воспользоваться FrameworkElement.FindName Method , если выможет полагаться на соглашение об именовании кнопок HyperlinkButtons с общим префиксом.

var hyperlinkButton = this.FindName("hyperlinkButton" + DateTime.Now.Day) as HyperlinkButton;
if (hyperlinkButton != null)
{
    hyperlinkButton.Background = new SolidColorBrush(Colors.Black);
}
0 голосов
/ 03 февраля 2012
switch(d)
{
case 1: doThings(); break;
case 2: doThings2(); break;
case 3:
    doSomeThings();
    doMoreThings();
    break;
default:
    runThingsIfDIsNotListed();
    break;
}

и т.д.

...