将String数组转换为int(月数转换为数字)

时间:2017-05-08 03:56:51

标签: c# arrays for-loop initialization

目前我有一个600个月的数组(1月到12月),我想根据初始数组创建一个新的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]);相关。

任何人都可以看到我出错的地方吗?

3 个答案:

答案 0 :(得分:2)

第一个问题的答案是移动循环的MonthNo1数组初始化 。将行int[] MonthNo1 = new int[Legacy.Month1.Length];移到外部for循环之外。我还建议在第一个for循环之外移动第二个for循环,因为您只需要遍历MonthNo1一次,而不是每次都向其添加一个元素。

第二个问题是由于第二个for循环中的条件不正确引起的。请注意,在第二个for循环中,计数器变量为j,而不是i

答案 1 :(得分:0)

不要使用开关,让我们创建一个新列表。比较后,只需添加到新列表中。请尝试以下方法:

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]);    
}

答案 2 :(得分:0)

您必须在for (int i = 0; i < Legacy.Month1.Length; i++)

之前初始化数组

for循环

中删除int[] MonthNo1 = new int[Legacy.Month1.Length];

在每个循环上初始化数组时,在 循环之前添加它,以便每次都覆盖。

结果:

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;
      }

}
相关问题