【问题标题】:How to declare the values of arrays in a switch statement in C#?如何在 C# 的 switch 语句中声明数组的值?
【发布时间】:2017-06-29 14:07:44
【问题描述】:

我是 C# 新手,我正在尝试弄清楚如何在 switch 语句中声明数组的值。我习惯于经常使用 PHP 和 Javascript,但我不知道如何在 C# 中执行此操作。这就是我现在拥有的:

string winkel = winkelDropdown.SelectedValue;
ArrayList products = new ArrayList();
output.Text = "Bij de " + winkel + " moet ik dit meenemen:<br />";
switch (winkel)
{        
    case "Albert Heijn":
        products.Add("Boter");
        products.Add("Kaas");
        products.Add("Eieren");
        break;
    case "Jumbo":
        products.Add("Spek");
        products.Add("Lamsvlees");
        products.Add("Huiswijn");
        break;
    case "Plus":
        products.Add("Spaghetti");
        products.Add("Pastasaus");
        products.Add("Kaasbroodje");
        break;
    case "Emté":
        products.Add("Jupiler Krat");
        products.Add("Barbeque kolen");
        products.Add("Frisdrank");
        break;
}
foreach (string product in products)
{
    output.Text += product + "<br />";
}

在 C# 中有没有办法让我的 switch 语句更短?例如这样的:

string[] productArray = string[3];
switch (winkel)
{        
    case "Albert Heijn":
        productArray = ["Boter", "Kaas", "Eieren"];
        break;
    case "Jumbo":
        productArray = ["Spek", "Lamsvlees", "Huiswijn"];
        break;
    case "Plus":
        productArray = ["Spaghetti", "Pastasaus", "Kaasbroodje"];
        break;
    case "Emté":
        productArray = ["Jupiler Krat", "Barbeque kolen", "Frisdrank"];
        break;
}

【问题讨论】:

  • 如果您将第一行更改为 string[] productArray = new string[3],您的第二个示例应该实际编译。 ArrayList 也相当过时。
  • 我会强烈建议使用List&lt;T&gt; 而不是ArrayList
  • @pijemcolu 和其他一些变化 ;-)

标签: c# arrays switch-statement


【解决方案1】:

首先,我会使用List&lt;T&gt; 而不是ArrayList

其次,如果要添加一个范围的项目,使用AddRange()并传入一个新的字符串数组:

string winkel = winkelDropdown.SelectedValue;
List<string> products = new List<string>();
switch (winkel)
{        
    case "Albert Heijn":
        products.AddRange(new [] { "Boter", "Kaas", "Eieren" });
        break;
    case "Jumbo":
        products.AddRange(new [] { "Spek", "Lamsvlees", "Huiswijn" });
        break;
    //etc
}

【讨论】:

    【解决方案2】:

    您可以为此使用AddRange

    string winkel = winkelDropdown.SelectedValue;
    ArrayList products = new ArrayList();
    output.Text = "Bij de " + winkel + " moet ik dit meenemen:<br />";
    switch (winkel)
    {        
        case "Albert Heijn":
            products.AddRange(new string[] {"Boter", "Kaas", "Eieren" });
            break;
            // ...
    }
    

    【讨论】:

    • 可能是因为使用了ArrayList
    • 我认为这是因为您错过了向 C# 新开发人员介绍 List&lt;T&gt; 优于 ArrayList 的好机会
    • 好的,我明白了。
    【解决方案3】:

    你几乎明白了:)

            string[] productArray;
            switch (winkel)
            {
                case "Albert Heijn":
                    productArray = new[] {"Boter", "Kaas", "Eieren"};
                    break;
                case "Jumbo":
                    productArray = new[] { "Spek", "Lamsvlees", "Huiswijn"};
                    break;
                case "Plus":
                    productArray = new[] { "Spaghetti", "Pastasaus", "Kaasbroodje"};
                    break;
                case "Emté":
                    productArray = new[] {"Jupiler Krat", "Barbeque kolen", "Frisdrank"};
                    break;
            }
    

    【讨论】:

      【解决方案4】:

      根据您发布的代码,您不能绕过 switch 语句,但正如已经回答的那样,您可以使用 AddRange() 方法一次添加 string 列表。最后,用ArrayList 代替List&lt;string&gt; 很糟糕

      List<string> products = new List<string>();
      

      【讨论】:

        【解决方案5】:

        使用字典

        var winkelToProducts = new Dictionary<string, string[]>();
        // init winkel to its' products
        var products = winkelToProducts[winkel];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-16
          • 2020-12-27
          • 2010-11-10
          相关资源
          最近更新 更多