C# foreach 中获取索引index方法的补充

foreach循环获取索引方法有时是需要的。在网上找到的无一例外是这个:

方法一:

int i = 0;
foreach (var item in arr)
{
       i++;
}


方法二:

foreach (var item in arr)
{
      int index = arr.indexOf(item); //index 为索引值
}

来源: http://www.cnblogs.com/zhyue93/p/foreach.html

第一个没有异议,但是第二个方法,这个对于我遇到的实际是没有作用的。我的是数组

int[] arr = new int[]{ 1, 2, 3, 4, 5, 6,3 };

这种你用arr.看智能提示中有没有indexof方法。最后我真的烦了,打算找出可行的方法。经过详细的测试,方法二是有条件的。它的条件就是变量是
new List<int>() 这种方式才可以用。具体我做了下测试:
string str1 = "";
var list = new List<int>() { 1, 2, 3, 4, 5, 6 ,2};
foreach(var item in list)
{
var index = list.IndexOf(item);
str1 += "index:" + index + ",value:" + item + " | ";
}
EventLog.WriteLog(str1);

这种才可以用arr.IndexOf(item) 形式获取到索引。
输出值:index:0,value:1 | index:1,value:2 | index:2,value:3 | index:3,value:4 | index:4,value:5 | index:5,value:6 | index:1,value:2 | 
可看到第二个输出索引是1,而第七个值,由于也是2,与第二个重复,索引输出也是1.
这意味着只有在值不重复的情况下获取的索引才是正确的。
而数组的情况下索引获取不能按第二种方法写。
方法三:
int[] arr = new int[]{ 1, 2, 3, 4, 5, 6,3 };
string str = "";
foreach(var item in arr)
{
var index = Array.IndexOf(arr, item);
str += "index:" + index + ",value:" + item + " | ";

}
EventLog.WriteLog(str);

这是数组情况下索引获取的写法:var index=Array.IndexOf(arr,item);
输出值:index:0,value:1 | index:1,value:2 | index:2,value:3 | index:3,value:4 | index:4,value:5 | index:5,value:6 | index:2,value:3 | 
看下输出值,第三个值和第七个值都是3,因此获取到的索引都是2.
这说明这种方法获取的索引也需要在不重复的情况下才能与方法一的相同。
获取索引若在值没有重复的情况下,方法一,方法二,方法三都能正确获取。若有重复,还是需要用方法一才能正确获取。
方法二适用的情况是List类型。方法三适用的类型是数组类型


  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值