根据当前项获取列表<字符串>中的下一项

本文关键字:一项 字符串 获取 列表 | 更新日期: 2023-09-27 18:34:55

我有一个List<string>,其中包含工资单编号作为字符串,例如:

 List<string> payrollnumbers = new List<string>() { "0","1","3" };

我想获取列表中的下一个值,因此:

  • 如果currpayrollnumber为 0,我想得到值 1,
  • 如果currpayrollnumber是 1,我想得到值 3,
  • 等。

我有以下代码,但它不像预期的那样工作:

 List<string> payrollnumbers = new List<string>();
 // fill payrollnumbers ...
 var currpayrollIndex = payrollnumbers.IndexOf(currpayrollnumber);
 var nextPayrollIndex = currpayrollIndex++;
 var payrollnumber = payrollnumbers[nextPayrollIndex];

根据当前项获取列表<字符串>中的下一项

因为您使用的是后缀增量运算符 ( i++ (,所以原始值是在递增之前分配给nextPayrollIndex的值currpayrollIndex。 您可以使用前缀递增运算符 ( ++i ( 代替,但我建议要么明确表示您正在添加 1 而不是根本不增加 currpayrollIndex

var nextPayrollIndex = currpayrollIndex + 1;

或者只是递增currpayrollIndex并使用它而不是nextPayrollIndex.

currpayrollIndex++;
var payrollnumber = payrollnumbers[currpayrollIndex];

我还建议添加检查,以确定currpayrollnumber何时不在列表中(IndexOf将返回-1(以及何时是最后一项(以避免ArgumentOutOfRangeException(

需要做的就是使用 ++currpayrollIndex 而不是 currpayrollIndex++

var nextPayrollIndex = ++currpayrollIndex;

您也可以完全删除该行,并在访问阵列时将其放入:

var payrollnumber = payrollnumbers[++currpayrollIndex];

但是,它非常不可读,并且可能不会被浏览代码的人注意到

你必须改变:

 var nextPayrollIndex = currpayrollIndex++;

var nextPayrollIndex = ++currpayrollIndex;

是你的解决方案currpayrollIndex值后增加 1 分配给变量后nextPayrollIndex

当您将增加currpayrollIndex矩更改为 1 时 - 您首先增加 1 currpayrollIndex值,然后分配给nextPayrollIndex变量

这里有很好的解释:

i++和++i有什么区别?

此外,您可能还希望将代码更改为以下内容:

var currpayrollIndex = payrollnumbers.IndexOf(currpayrollnumber);
var payrollnumber = payrollnumbers[++currpayrollIndex ];

它将更具可读性