我目前正在使用foreach,需要该项目的索引。
foreach (DataRow m_row in base_rows)
{
Company nu = new Company(m_row, symb_rows[0]);
}
这是代码。
我正在尝试在base_rows中获取m_row的索引并使用它来传递symb_rows[index_of_m_row]
。这是可能的还是我应该使用正常的for循环?
答案 0 :(得分:11)
“for”循环解决方案非常清晰。作为一个有趣的替代解决方案,您可以完全避开循环:
var companies = baseRows
.Select((row, index) => new Company(row, symbRows[index]))
.ToList();
答案 1 :(得分:7)
为了知道集合中的当前索引(使用foreach
),您必须这样做:
Int32 i = 0;
foreach (DataRow m_row in base_rows)
{
Company nu = new Company(m_row, symb_rows[i]);
i++;
}
或使用标准for
循环。 IEnumerable
接口不公开位置索引属性,因为它是基础序列项的仅向前迭代器。
答案 2 :(得分:1)
你必须使用正常的for-loop或创建自己的计数器,就像Andrew Hare建议的那样。我建议使用for循环。
答案 3 :(得分:1)
如果需要索引,可以采用正常的循环方式。
答案 4 :(得分:1)
解决它的绝对最佳方法当然是使用for(){}循环。但你可以搞定时髦并写一个扩展方法:)
public static void ForEachWithIndex<T>(this IEnumerable<T> items, Action<T, int> render)
{
if (items == null)
return;
int i = 0;
items.ForEach(item => render(item, i++));
}
并且也使用它
base_rows.ForEachWithIndex((m_row, index) => {
Company nu = new Company(m_row, symb_rows[index]);
});
但话说回来,也许for-loop可以更好地完成工作;)
答案 5 :(得分:0)
我只是使用普通循环。
每次循环时你都可以获得一个增量值,但正常for( int i = 0....
将是你最好的选择。
答案 6 :(得分:0)
我可能会考虑像这样使用IndexOf()方法:
foreach(DataRow m_row in base_rows)
Company nu = new Company(m_row, symb_rows.IndexOf(m_row));
也许你必须使用Array.IndexOf(),这在VBNET2008中工作,因为我正在使用它,但我没有在C#中测试它。
For Each DataRow m_row in base_rows
Company nu = New Company(m_row, symb_rows(Array.IndexOf(symb_rows, m_row)))
Next
所以我可能会在C#中建议以下内容。
foreach (DataRow m_row in base_rows)
Company nu = new Company(m_row, symb_rows[Array.IndexOf(symb_rows, m_row)]);
否则,您可能会考虑使用for(;;),有时候最好这样做。
for(int index = 0; index < base_rows.Length && index < symb_rows.Length; ++index)
Company nu = new Company(base_rows[index], symb_rows[symb_rows.IndexOf(base[index])]);
我不知道你喜欢哪个。