所以我对编程世界如此陌生,开始新的,我决定开始在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;
}
答案 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方法,以下是基于一些事项/假设的示例:
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;
});
您可以在link
上更熟悉LINQ和使用过的方法