将字符串数组转换为int(月份为数字)
问题描述:
目前我有600个月(1月至12月)的数组,我想创建一个基于初始数组的基于int的新数组。将字符串数组转换为int(月份为数字)
目前我有(忽略任何遗产。作为即时通讯从不同势类调用数组)
for (int i = 0; i < Legacy.Month1.Length; i++)
{
int[] MonthNo1 = new int[Legacy.Month1.Length];
switch (Legacy.Month1[i])
{
case "January ":
MonthNo1[i] = 1;
break;
case "February ":
MonthNo1[i] = 2;
break;
case "March ":
MonthNo1[i] = 3;
break;
case "April ":
MonthNo1[i] = 4;
break;
case "May":
MonthNo1[i] = 5;
break;
case "June ":
MonthNo1[i] = 6;
break;
case "July ":
MonthNo1[i] = 7;
break;
case "August ":
MonthNo1[i] = 8;
break;
case "September ":
MonthNo1[i] = 9;
break;
case "October":
MonthNo1[i] = 10;
break;
case "November":
MonthNo1[i] = 11;
break;
case "December ":
MonthNo1[i] = 12;
break;
}
for (int j = 0; i < MonthNo1.Length; j++)
{
Console.WriteLine(MonthNo1[j]);
}
可惜,这似乎并没有工作。
它成功输出第一个转换的数字,但其他599都是空白的。对在过程结束时最重要的是,我得到异常
System.IndexOutOfRangeException
在代码的底部有关的Console.WriteLine(MonthNo1[j]);
。
任何人都可以看到我在哪里出错吗?
答
第一个问题的答案是将MonthNo1
阵列初始化出循环。将外线for
循环外的线int[] MonthNo1 = new int[Legacy.Month1.Length];
移开。我还建议在第一个for
循环之外移动第二个for
循环,因为您只需要遍历MonthNo1
一次,而不是每次向它添加一个元素。
第二个问题是由于第二个for
循环中的条件不正确造成的。请注意,在第二个for
循环中,计数器变量为j
,而不是i
。
答
不要使用开关,让我们创建一个新的列表。比较后,只需添加到新列表中。请尝试以下操作:
var monthNo1 = new List<int>();
if(!string.IsNullOrEmpty(Legacy.Month1[i]))
{
if (Legacy.Month1[i].Trim() == "January")
monthNo1 .Add(1);
if (Legacy.Month1[i].Trim() == "February")
monthNo1 .Add(2);
...
}
for (int j = 0; i < monthNo1.Length - 1; j++)
{
Console.WriteLine(monthNo1[j]);
}
答
必须先将for (int i = 0; i < Legacy.Month1.Length; i++)
初始化数组从删除int[] MonthNo1 = new int[Legacy.Month1.Length];
for循环
的之前添加它环你初始化的阵列每一个循环都会覆盖每一次。
结果:
int[] MonthNo1 = new int[Legacy.Month1.Length];
for (int i = 0; i < Legacy.Month1.Length; i++)
{
switch (Legacy.Month1[i])
{
case "January ":
MonthNo1[i] = 1;
break;
case "February ":
MonthNo1[i] = 2;
break;
}
}
那么,通过我的逻辑'INT [] MonthNo1 =新INT [Legacy.Month1.Length]'将为取每一个循环的600个整数新的数组,和'MonthNo1'将在第一个循环结束时只包含1条记录(因此抛出索引超出范围),我说得对吗?尝试在第一个循环外拉出int [] MonthNo1 = new int [Legacy.Month1.Length]。 –