缩短“;如果“否则”;功能

本文关键字:功能 如果 缩短 否则 | 更新日期: 2023-09-27 18:05:59

我有一个最大值为"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...
}

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

缩短“;如果“否则”;功能

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[]

为什么不定义一个值数组并直接索引到此数组?

private String[] values = new String[9] {"Value1", "Value2", ... , "Value9"};
private void Slider_Scroll(object sender, EventArgs e)
{
    Label.Text = values[Slider.value];
}

扩展滑块并添加Name属性。

Label.Text = Slider.Name;

您可以使用List<string>并使用Slider.Value:对其进行索引

List<string> list = new List<string>() { "Text1", "Text2", ... , "TextN" };
Label.Text = list[Slider.Value];

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

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

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

如果它的nt总是默认的:

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

我会使用一个数组:

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

马里奥