Get current index from foreach loop
使用C和Silverlight
如何获取列表中当前项的索引?
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | IEnumerable list = DataGridDetail.ItemsSource as IEnumerable; List<string> lstFile = new List<string>(); foreach (var row in list) { bool IsChecked = (bool)((CheckBox)DataGridDetail.Columns[0].GetCellContent(row)).IsChecked; if (IsChecked) { // Here I want to get the index or current row from the list } } |
如何做到这一点
你不能,因为EDCOX1的2度根本没有索引…如果你确信你的枚举小于EDCOX1,3个元素(或者EDCOX1,4),如果你使用一个EDCOX1,5个索引,你可以:
不要使用FROACH,并使用EDCOX1的0个循环,将EDCOX1的2个变量转换为一般可枚举的第一个:
1 2 3 4 5 6 | var genericList = list.Cast<object>(); for(int i = 0; i < genericList.Count(); ++i) { var row = genericList.ElementAt(i); /* .... */ } |
具有外部索引:
1 2 3 4 5 6 | int i = 0; foreach(var row in list) { /* .... */ ++i; } |
通过LINQ获取索引:
1 2 3 4 5 6 | foreach(var rowObject in list.Cast<object>().Select((r, i) => new {Row=r, Index=i})) { var row = rowObject.Row; var i = rowObject.Index; /* .... */ } |
在你的例子中,由于你的
您的数据类型不清楚,但我假设
"指数"的概念与
举个例子:
1 2 3 4 5 6 7 8 | public static IEnumerable InfiniteEnumerable() { var rnd = new Random(); while(true) { yield return rnd.Next(); } } |
所以如果你这样做:
1 2 3 4 | foreach(var row in InfiniteEnumerable()) { /* ... */ } |
你的
因此,虽然给出的示例适用于典型的用法,但是如果您可以避免使用索引,那么我完全不希望使用索引。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | IEnumerable list = DataGridDetail.ItemsSource as IEnumerable; List<string> lstFile = new List<string>(); int i = 0; foreach (var row in list) { bool IsChecked = (bool)((CheckBox)DataGridDetail.Columns[0].GetCellContent(row)).IsChecked; if (IsChecked) { MessageBox.show(i); --Here i want to get the index or current row from the list } ++i; } |
使用Enumerable。选择
1 2 3 4 5 6 7 | list = list.Cast<object>().Select( (v, i) => new {Value= v, Index = i}); foreach(var row in list) { bool IsChecked = (bool)((CheckBox)DataGridDetail.Columns[0].GetCellContent(row.Value)).IsChecked; row.Index ... } |
这里有两个选项,1。使用
1 2 3 4 5 6 7 8 9 10 | int i = 0; // for index foreach (var row in list) { bool IsChecked;// assign value to this variable if (IsChecked) { // use i value here } i++; // will increment i in each iteration } |