使用foreach(...)语法,同时在循环内增加索引变量

Mik*_*zur 4 .net c# syntax loops for-loop

在查看C#代码时,我经常会看到这样的模式:

DataType[] items = GetSomeItems();
OtherDataType[] itemProps = new OtherDataType[items.Length];

int i = 0;
foreach (DataType item in items)
{
    // Do some stuff with item, then finally
    itemProps[i] = item.Prop;
    i++;
}
Run Code Online (Sandbox Code Playgroud)

for循环遍历对象items,但也保持counter(i)以进行迭代itemProps.我个人不喜欢这种额外的i闲逛,而是可能做的事情如下:

DataType[] items = GetSomeItems();
OtherDataType[] itemProps = new OtherDataType[items.Length];

for (int i = 0; i < items.Length; i++)
{
    // Do some stuff with items[i], then finally
    itemProps[i] = items[i].Prop;
}
Run Code Online (Sandbox Code Playgroud)

对于我不知道的第一种方法,是否有一些好处?这是每个人都试图使用这种花哨foreach (...)语法的结果吗?我对你的意见感兴趣.

Ali*_*söz 7

如果你使用C#3.0会更好;

OtherDataType[] itemProps = items.Select(i=>i.Prop).ToArray();
Run Code Online (Sandbox Code Playgroud)