在 C# 中传递数组

本文关键字:数组 | 更新日期: 2024-10-30 11:50:06

嗨,我正在研究成绩计算。我这里的问题是,如果字符串数组的长度比 int 数组长,它会跳过最后 2 个等级。前任:

int[] unit = new int[] {1,-3,3,4};
string[] letter_grade = new string[] {"A", "B","B","W","D","F"};
但是,如果 int 数组的长度

比字符串数组的长度长,则其不工作,其抛出错误 Index 超出了数组的范围。

int[] unit = new int[] {1,-3,3,4,5,6,7};
string[] letter_grade = new string[] {"A", "B","B"};

所以我的问题如何让它同时适用于两者?

int length = unit.Length;
int no_units = length;
double totalGrade_Points = 0.0;
int totalno_units = 0;
totalGPA = 0;
for (int i = 0; i < unit.Length; i++)
{
  entrygot = findGpaListentry(letter_grade[i]); //Index was outside the bounds of the array.
  if (entrygot != null)
  {
     //some code calculation
  }
}

在 C# 中传递数组

对于数组索引,您必须很好地定义开始和停止条件。要访问两个数组,它们必须相等,或者在某些有效条件下进行比较。看看这个:

for(int i=0;i<unit.length;i++){
entrygot = findGpaListentry(letter_grade[i]);// only if letter_grade is valid under all values of i i.e unit.length
}

// either you have to check as if;
    if(lenght_of_letter_grade < i-1)
    //then access 
    entrygot = findGpaListentry(letter_grade[i]);

您不能只检查数组项是否为 null,因为您将超出数组的范围,并且在 null 检查发生之前将出现异常。

我会在每次迭代时检查数组的长度......

for (int i = 0; i < unit.Length; i++)
{
    if (currentArray.Length < i - 1) { break; }
    // other code...
}

我认为在您的情况下,元素的数量永远不会很大,因此性能不会成为问题。所以我认为你应该使用列表而不是数组。对于数组,每次某些逻辑更改或添加其他功能时,您都必须进行插入检查。

foreach循环最适合您的场景。

    foreach (string s in letter_grade)
    {
      entrygot = findGpaListentry(s); 
      if (entrygot != null)
      {
         //some code calculation
      }
}