如何将String列表转换为String数组,然后将其转换为int数组,然后计算数组中数字的总和?

时间:2018-04-02 11:04:26

标签: c# arrays foreach

所以我对编程世界如此陌生,开始新的,我决定开始在C#中乱搞来创建简单的应用程序,从想到的想法,这个小应用程序,我试图有多个TextBoxes命名d1,d2,d3,d4等...用户在文本框中插入数字,然后单击button1,这将在下面的代码中开始处理,创建一个包含文本框的所有值的新列表,然后转换列表到数组然后将数组转换为int数组等....

但是,当启动应用程序并将值添加到文本框然后单击button1时,它会显示2错误,如下面//灰色代码行中的显示

请帮忙。

private void button1_Click(object sender, EventArgs e)
{
    List<string> dodo = new List<string>();
    dodo.Add(d1.Text); dodo.Add(d2.Text); dodo.Add(d3.Text); dodo.Add(d4.Text); dodo.Add(d5.Text);
    dodo.Add(d6.Text); dodo.Add(d7.Text); dodo.Add(d8.Text); dodo.Add(d9.Text); dodo.Add(d10.Text);
    dodo.Add(d11.Text); dodo.Add(d12.Text); dodo.Add(d13.Text); dodo.Add(d14.Text); dodo.Add(d15.Text);
    dodo.Add(d16.Text); dodo.Add(d17.Text); dodo.Add(d18.Text); dodo.Add(d19.Text); dodo.Add(d20.Text);
    foreach(string numb in dodo)
    {
        if (numb == "")
            numb = "0"; //numb word has a red underline
    }

    string[] terms = dodo.ToArray();
    int[] valv = {};
    int x = 0;
    for(int i=0;i<=19;i++)
    {
        valv[i] = int.Parse(terms[i]); //the ; in the end has a red underline and shows "FormatException was unhandled" error
        i++;
        x = x + valv[i];
    }
     string myString;
    myString = x.ToString();
    Result1.Text = myString;
}

2 个答案:

答案 0 :(得分:1)

你不能改变你的情况下麻木的迭代变量。请更改列表容器

        List<string> dodo = new List<string>();
        dodo.Add(d1.Text); dodo.Add(d2.Text); dodo.Add(d3.Text); dodo.Add(d4.Text); dodo.Add(d5.Text);
        dodo.Add(d6.Text); dodo.Add(d7.Text); dodo.Add(d8.Text); dodo.Add(d9.Text); dodo.Add(d10.Text);
        dodo.Add(d11.Text); dodo.Add(d12.Text); dodo.Add(d13.Text); dodo.Add(d14.Text); dodo.Add(d15.Text);
        dodo.Add(d16.Text); dodo.Add(d17.Text); dodo.Add(d18.Text); dodo.Add(d19.Text); dodo.Add(d20.Text);

        int k = 0;

        foreach (string numb in dodo)
        {
            if (numb == "")
            {
                //numb = "0"; //numb word has a red underline
                dodo[k] = "0";
            }

            k++;
        }

现在,解析为整数的代码不会产生任何运行时错误。

答案 1 :(得分:1)

第一行“告诉”您无法为用作foreach迭代变量的变量分配新值。

第二行“告诉”您有无法正确解析的字符串值(例如,用户输入的字符串不是数字)。为避免这种情况,您可以使用Int32.TryParse方法,这将安全地尝试解析给定的字符串。

实现所需内容的最佳和最简单的方法是使用LINQ方法,以下是基于一些事项/假设的示例:

  1. 由于您要将空字符串转换为零,因此您可以简单地跳过这些条目来计算
  2. 要避免FormatException,您应该使用TryParse方法。由于TryParse方法将安全地解析给定的字符串,因此您根本不必过滤空字符串(它们将被跳过)。但是,我故意留下过滤部分,以便更好地概述解决方案。
  3. 您可以使用列表初始化程序使列表初始化更具可读性
  4. 解决方案:

    List<string> dodo = new List<string>()
    {
       d1.Text, d2.Text //...others
    };
    
    int sum = dodo
            .Where(item => !String.IsNullOrEmpty(item))
            .Sum(item =>
            {
                if (Int32.TryParse(item, out int parsedItem))
                {
                    return parsedItem;
                }
                return 0;
            });
    

    您可以在link

    上更熟悉LINQ和使用过的方法