2016-09-25 100 views
1

我该怎么写这个更短?对于每种情况,我必须写这个,然后它太长,因为有48个数字,所以我需要48个案例。有没有办法让循环?如何使循环代替switch语句?

switch (ballBounce.ToString()) 
     { 
      case "1": 
       if (ballBounce == n0) 
       { 
        textBox1.Text = number.ToString();       
       } 
       break; 

      case "2": 
       if (ballBounce == n1) 
       { 
        textBox1.Text = number.ToString(); 
       } 
       break; 

      case "3": 
       if (ballBounce == n2) 
       { 
        textBox1.Text = number.ToString(); 
       } 
       break; ... 
+0

你显然采取了错误的方式。但是你的代码太短,无法理解它的功能。但是从那我可以说n0,n1,n2应该是一个数组。 – bokan

+0

你只需要将'ballBounce'与'nX'配对。听起来像你需要一个'字典',然后简单地说:'if(ballBounce == dictionary [ballBounce])textBox1.Text = number.ToString()' – haim770

回答

4

在这种情况下,循环无用。 您可以使用字典。

private Dictinoary<string, string> cases = new Dictionary<string, string> { 
    {"1", "one"}, 
    {"2", "two"}, 
    // ... 
}; 

// in some method 
string text; 
if (cases.TryGetValue(ballBounce.ToString(), out text)){ 
    this.textBox1.Text = text; 
} 

如果你想要比简单的值更聪明的东西,你可以在字典中有功能。

private Dictinoary<string, Func<string>> cases = new Dictionary<string, Func<string>> { 
    {"1",() => "one"}, 
    {"2",() => 
    { 
     if (DateTime.Now.Seconds % 2 == 0) { return "A"; } 
     else { return "B"; } 
    }}, 
    // ... 
}; 

// in some method 
Func<string> textProvider; 
if (cases.TryGetValue(ballBounce.ToString(), out textProvider)){ 
    this.textBox1.Text = textProvider(); 
} 
0

为什么使用ifcase? 你不需要检查两次。 此外,如果这是对每一个案件

textBox1.Text = number.ToString(); 

的代码,那么你不需要switchif 仅仅指刚写textBox1.Text = number.ToString();,你是好去。 此外,如果你有一些情况下,ONY,你可以这样做的:

switch (ballBounce.ToString()) 
{ 
    case "1": 
    case "2": 
    case"3": 
    //.... 
    textBox1.Text = number.ToString(); 
} 
1

根据您的ToString()的,我假设ballBounce是一个int。

if (ballBounce <= 48 && ballBounce > 0) 
{ 
    textBox1.Text = ballBounce.ToString(); 
}