Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串列表转换为字符串数组,然后将其转换为整数数组,然后计算数组中数字的总和?_C#_Arrays_Foreach - Fatal编程技术网

C# 如何将字符串列表转换为字符串数组,然后将其转换为整数数组,然后计算数组中数字的总和?

C# 如何将字符串列表转换为字符串数组,然后将其转换为整数数组,然后计算数组中数字的总和?,c#,arrays,foreach,C#,Arrays,Foreach,因此,我对编程的世界非常新鲜,开始了新的尝试,我决定开始在C#中胡闹,从脑海中浮现的想法创建简单的应用程序,有了这个小应用程序,我尝试创建多个名为d1、d2、d3、d4等的文本框。。。用户在文本框中插入数字,然后单击按钮1,这将在下面的代码中开始创建一个包含文本框所有值的新列表的过程,然后列表将转换为数组,数组将转换为int数组,等等 但是,当启动应用程序时,我向文本框中添加值,然后单击按钮1,它会显示2个错误,如下面的//灰色代码行所示 请帮忙 private void按钮1\u单击(对象发送

因此,我对编程的世界非常新鲜,开始了新的尝试,我决定开始在C#中胡闹,从脑海中浮现的想法创建简单的应用程序,有了这个小应用程序,我尝试创建多个名为d1、d2、d3、d4等的文本框。。。用户在文本框中插入数字,然后单击按钮1,这将在下面的代码中开始创建一个包含文本框所有值的新列表的过程,然后列表将转换为数组,数组将转换为int数组,等等

但是,当启动应用程序时,我向文本框中添加值,然后单击按钮1,它会显示2个错误,如下面的//灰色代码行所示

请帮忙

private void按钮1\u单击(对象发送者,事件参数e)
{
List dodo=新列表();
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(dodo中的麻绳)
{
如果(numb==“”)
numb=“0”//numb单词有一条红色下划线
}
string[]terms=dodo.ToArray();
int[]valv={};
int x=0;

对于(int i=0;i您不能更改迭代变量,该变量在您的情况下是无效的。请改为在列表容器中更改

        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++;
        }
List dodo=new List();
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(dodo中的麻绳)
{
如果(numb==“”)
{
//numb=“0”//numb单词有一条红色下划线
渡渡鸟[k]=“0”;
}
k++;
}
现在,解析为整数的代码不会给出任何运行时错误。

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

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

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

  • 由于您正在将空字符串转换为零,因此可以简单地跳过这些条目的计数
  • 为了避免
    FormatException
    ,您应该改用
    TryParse
    方法。因为
    TryParse
    方法将安全地解析给定的字符串,所以您甚至不必过滤空字符串(它们将被跳过)。不过,我特意留下了过滤部分,以便更好地了解解决方案
  • 可以使用列表初始值设定项使列表初始化更具可读性
  • 解决方案:

    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;
            });
    
    List dodo=new List()
    {
    d1.文本,d2.文本//…其他
    };
    整数和=dodo
    .Where(item=>!String.IsNullOrEmpty(item))
    .Sum(项目=>
    {
    if(Int32.TryParse(item,out int parsedItem))
    {
    返回parsedItem;
    }
    返回0;
    });
    

    您可以更熟悉LINQ和以下使用的方法

    首先,下划线被称为
    squiggly
    ,其次,如果您将鼠标放在它上面,告诉您问题出在哪里。@frank True,它告诉我valv[i]=int.Parse(terms[i])中的“输入字符串格式不正确”;代码中的行..可以做些什么来修复它?这是你必须学习的东西。但是我可以给你一个很大的提示。在你的
    dodo.ToArray()上设置一个断点
    并检查数组中每个项的值是多少。在for循环中,您正在增加i。因为您已经在for语句本身中这样做了,所以您正在跳过值。初始化数组时,您必须给它一个大小。您不能只在随机索引处添加值(您的valv数组)