C# 将字符串数组转换为整数(将月份转换为数字)
目前我有一个600个月(1月到12月)的数组,我想在初始数组的基础上创建一个新的int数组 目前我有(忽略任何遗留问题。因为我从不同的类调用数组)C# 将字符串数组转换为整数(将月份转换为数字),c#,arrays,for-loop,initialization,C#,Arrays,For Loop,Initialization,目前我有一个600个月(1月到12月)的数组,我想在初始数组的基础上创建一个新的int数组 目前我有(忽略任何遗留问题。因为我从不同的类调用数组) for(int i=0;i
for(int i=0;i
不幸的是,这似乎不起作用
它成功地输出了第一个转换后的数字,但是其他599都是空的
System.IndexOutOfRangeException
与控制台相关。WriteLine(MonthNo1[j]);
位于代码底部
有人知道我的错误在哪里吗?第一个问题的答案是将
MonthNo1
数组初始化移出循环。移动行int[]MonthNo1=new int[Legacy.Month1.Length]
在外部for
循环的外部。我还建议将第二个for
循环移动到第一个for
循环的外部,因为您只需要在MonthNo1
上迭代一次,而不是每次向其添加元素
第二个问题是由于第二个
for
循环中的不正确条件引起的。请注意,在第二个for
循环中,计数器变量是j
,而不是i
第一个问题的答案是将MonthNo1
数组初始化移出循环。将行int[]MonthNo1=new int[Legacy.Month1.Length];
for循环的外部之外。我还建议将第二个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]);
}
var monthNo1=新列表();
如果(!string.IsNullOrEmpty(Legacy.Month1[i]))
{
if(Legacy.Month1[i].Trim()=“一月”)
monthNo1.添加(1);
if(Legacy.Month1[i].Trim()=“二月”)
月1.添加(2);
...
}
对于(int j=0;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]);
}
var monthNo1=新列表();
如果(!string.IsNullOrEmpty(Legacy.Month1[i]))
{
if(Legacy.Month1[i].Trim()=“一月”)
monthNo1.添加(1);
if(Legacy.Month1[i].Trim()=“二月”)
月1.添加(2);
...
}
对于(int j=0;i
必须在之前初始化数组(int i=0;i
从for循环的中删除int[]MonthNo1=newint[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=newint[Legacy.Month1.Length];
对于(int i=0;i
必须在之前初始化数组(int i=0;i
从for循环的中删除int[]MonthNo1=newint[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=newint[Legacy.Month1.Length];
对于(int i=0;i
根据我的逻辑,int[]MonthNo1=new int[Legacy.Month1.Length]
将为每个循环创建600个int的新数组,并且MonthNo1
在第一个循环结束时只包含一条记录(因此将索引抛出范围之外),对吗?尝试拉取int[]MonthNo1=new int[Legacy.Month1.Length]
ou