C# 将字符串数组转换为整数(将月份转换为数字)

C# 将字符串数组转换为整数(将月份转换为数字),c#,arrays,for-loop,initialization,C#,Arrays,For Loop,Initialization,目前我有一个600个月(1月到12月)的数组,我想在初始数组的基础上创建一个新的int数组 目前我有(忽略任何遗留问题。因为我从不同的类调用数组) for(int i=0;i

目前我有一个600个月(1月到12月)的数组,我想在初始数组的基础上创建一个新的int数组

目前我有(忽略任何遗留问题。因为我从不同的类调用数组)

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