根据当前项获取List <string>中的下一个项目

时间:2016-02-17 12:13:24

标签: c# string list indexing

我有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];

3 个答案:

答案 0 :(得分:2)

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

var nextPayrollIndex = currpayrollIndex + 1;

或者只是增加currpayrollIndex并使用它代替nextPayrollIndex

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

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

答案 1 :(得分:1)

您需要做的就是使用++currpayrollIndex代替currpayrollIndex++

var nextPayrollIndex = ++currpayrollIndex;

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

var payrollnumber = payrollnumbers[++currpayrollIndex];

然而,这是非常难以理解的,人们可能不会注意到代码

答案 2 :(得分:1)

你必须改变:

 var nextPayrollIndex = currpayrollIndex++;

var nextPayrollIndex = ++currpayrollIndex;

在将分配给currpayrollIndex变量之后,您的解决方案nextPayrollIndex值是否增加1

当您将增加的时刻currpayrollIndex更改为1时 - 您首先增加1 currpayrollIndex值,下一步增加到nextPayrollIndex变量

这里有很好的解释:

What is the difference between i++ and ++i?

此外,您可能希望将代码更改为:

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

它将更具可读性