缩短“if,else”函数的代码

时间:2011-08-19 07:22:28

标签: c#

我有一个最大值为“9”的滑块。每个值都应更改标签的文本。 我现在只能想到这种方法:

private void Slider_Scroll(object sender, EventArgs e)
{
    if (Slider.Value == 0)
        {
            Label.Text = "Text1";
        }
    else if (Slider.Value == 1)
        {
            Label.Text = "Text2";
        }
    //...and so on...
}

有没有一种方法可以用更短的方式做到这一点?

8 个答案:

答案 0 :(得分:12)

switch(Slider.Value) {
    case 0: Label.Text = "Text1"; break;
    case 1: Label.Text = "Text2"; break;
}

或;使用字典:

static readonly Dictionary<int,string> labels = new Dictionary<int,string> {
    {0, "Text1"},
    {1, "Text2"}
};

string text;
if(labels.TryGetValue(Slider.Value, out text)) {
    Label.Text = text;
}

如果您需要在运行时根据配置查找文本(即它们不是硬编码的),字典方法特别有用。

如果您的值是连续的整数(0到9等),您也可以使用string[]

答案 1 :(得分:3)

为什么不定义一个值数组而只是索引到这个数组?

private String[] values = new String[9] {"Value1", "Value2", ... , "Value9"};

private void Slider_Scroll(object sender, EventArgs e)
{
    Label.Text = values[Slider.value];
}

答案 2 :(得分:2)

扩展滑块并为其添加Name属性。

Label.Text = Slider.Name;

答案 3 :(得分:0)

使用Switch...Case代替if..else

private void Slider_Scroll(object sender, EventArgs e)
{
    var text = string.Empty;
    Switch(Slider.Value)
    {
         case 0:
          text = "text1";
         break;
         case 1:
          text = "text2";
         break;
         //....go on  
    }

     Label.Text = text;
}

答案 4 :(得分:0)

Label.Text = "Text" + (1 + Slider.Value).ToString()

答案 5 :(得分:0)

Label.Text = string.Format("Text{0}",Slider.Value+1);

如果它的默认值始终为:

static reaonly Dictionary<int,string> labelMap = new Dictionary<int,string> {
    {0, "Text1"}, {1, "Text2"}, {1, "TextValue3"}
};

if(labelMap.ContainsKey(Slider.Value))
{
Label.Text = string.Format("Text{0}",labelMap [Slider.Value]);
}
else
{
Label.Text=<defaut_value>; //or throw exception etc..
}

答案 6 :(得分:0)

您可以使用List<string>并使用Slider.Value索引它:

List<string> list = new List<string>() { "Text1", "Text2", ... , "TextN" };

Label.Text = list[Slider.Value];

答案 7 :(得分:0)

我会使用数组:

string SliderLabels[] = {"Text1"
                         , "Text2"
                         , "Text3"
                         , "Text4"
                         , "Text5"
                         , "Text6"
                         , "Text7"
                         , "Text8"
                         , "Text9"};

private void Slider_Scroll(object sender, EventArgs e)
{
    if ( Slider.Value <   SliderLables.length )
    {
       Label.Text = SliderLabels[ SliderValue ];
    }

}

请原谅错别字或小语法错误,我手边没有VS.

HTH

马里奥