Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Foreach中的索引_C#_Foreach - Fatal编程技术网

C# Foreach中的索引

C# Foreach中的索引,c#,foreach,C#,Foreach,我目前正在使用foreach,需要该项的索引 foreach (DataRow m_row in base_rows) { Company nu = new Company(m_row, symb_rows[0]); } 这是密码 我正在尝试获取基本行中m_行的索引,并使用该索引传递symb_行[m_行的索引]。这是可能的还是应该使用普通for循环?为了了解集合中的当前索引(使用foreach),必须执行以下操作: Int

我目前正在使用foreach,需要该项的索引

           foreach (DataRow m_row in base_rows)
       {
           Company nu = new Company(m_row, symb_rows[0]);
       }
这是密码


我正在尝试获取基本行中m_行的索引,并使用该索引传递
symb_行[m_行的索引]
。这是可能的还是应该使用普通for循环?

为了了解集合中的当前索引(使用
foreach
),必须执行以下操作:

Int32 i = 0;
foreach (DataRow m_row in base_rows)
{
    Company nu = new Company(m_row, symb_rows[i]);
    i++;
}

或者对循环使用标准的
IEnumerable
接口不公开位置索引属性,因为它是底层项序列上的仅向前的迭代器。

您必须使用普通for循环,或者像Andrew Hare建议的那样创建自己的计数器才能工作。我建议使用for循环。

如果需要索引,正常的for循环是一种方法。

我只会使用正常的循环

您可以在每次循环时都有一个整数作为增量,但正常的
for(int i=0….
将是您的最佳选择。

for”循环解决方案非常清晰。作为一个有趣的替代解决方案,您可以完全避免循环:

var companies = baseRows
  .Select((row, index) => new Company(row, symbRows[index]))
  .ToList();

当然,解决这个问题的最佳方法是使用for(){}循环


但话说回来,也许for循环做得更好;)

> P>我可能会考虑使用索引方法(如:S/< P/P>)
foreach(DataRow m_row in base_rows)
    Company nu = new Company(m_row, symb_rows.IndexOf(m_row));
也许您必须改用Array.IndexOf(),它在VBNET2008中工作,因为我目前正在使用它,但我没有在C#中测试它

因此,我可能会在C#中提出以下建议

否则,您可能会考虑使用AF(;)代替,有时最好这样做。

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])]);
for(int index=0;index

但我不知道您更喜欢哪一个。

是的,我只使用for循环,同时尝试使用GetLowerBound、GetUpperBound并检查以确保循环时每个I都有效。稍微偏离主题,但对于某些集合,无法按整数索引。字典不能像这样进行索引,链表的性能会很差。我会使用迭代器加上manula整数索引,并将性能问题留待以后解决。@Andrew:因此这可能是个坏主意。我不喜欢聪明的代码。我喜欢简单、枯燥、易读、易懂、不需要任何聪明的代码。在操作语义更像查询而不是转换的上下文中,此技术可能很有用;我认为在这种特殊的情况下,这是一种过度杀伤力,for循环可能是更好的解决方案。真的,这只是为了娱乐。我理解并完全同意。不过,我还是很欣赏这种娱乐方式!:)+1@Eric Lippert:我真的很欣赏你对枯燥、简单、易于阅读和理解的代码的观点。此外,这是谦虚的承认它的聪明。我真的很喜欢你所说的。使用IndexOF(),你可以使循环成为O(n^2);IndexOf(我想)会检查列表中的每个元素,为您找出索引。@Dean J:我完全同意。因此,它满足了问题的目标,即在foreach()循环中获取索引。事实上,我更喜欢@Eric Lippert的聪明解决方案谢谢你的评论!
foreach(DataRow m_row in base_rows)
    Company nu = new Company(m_row, symb_rows.IndexOf(m_row));
For Each DataRow m_row in base_rows
    Company nu = New Company(m_row, symb_rows(Array.IndexOf(symb_rows, m_row)))
Next
foreach (DataRow m_row in base_rows)
    Company nu = new Company(m_row, symb_rows[Array.IndexOf(symb_rows, m_row)]);
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])]);