使用ReSharper可以将'foreach'循环转换为'for'循环或者将'for'循环转换为'foreach'循环吗?

9

使用ReSharper可以将foreach循环代码块标记并转换为for循环吗?

还是使用Visual Studio?

谢谢!

3个回答

4

没错,ReShaper可以做到。我在VS2010 + R#5中进行了测试。

之前:

        var a = new int[] {1, 2, 3, 4};
        foreach (var i in a)
        {

        }

之后:

    var a = new int[] {1, 2, 3, 4};
    for (int index = 0; index < a.Length; index++)
    {
        var i = a[index];
    }

3
请确认您正在对列表进行迭代,以便可以通过索引访问元素,然后在foreach关键字上按下“Alt-Enter”键。 - northben
哇,6年后竟然被踩了!不介意分享一下原因吗? - Ralf de Kleine
1
如果让我猜的话,我会说这是因为答案虽然完全回答了问题,但没有解释如何实现。这在另一个答案和您的评论中完成了。OP没有问如何实现,但可以安全地假设如果他必须问是否可能,他不会知道如何做,并且很可能也想了解这一点。 - Chexxor
哈哈!又来了一个。 - Ralf de Kleine

3

现在甚至可以不使用Resharper来完成这个操作(已在C#项目上测试过Visual Studio 2017):

int[] array = new int[3] { 1, 2, 3 };

foreach (int item in array)
{
   int someVariable = item;
   //Your logic
}

成为
int[] array = new int[3] { 1, 2, 3 };

for (int i = 0; i < array.Length; i++)
{
   int item = array[i];
   int someVariable = item;
  //Your logic
}

(反之亦然!) 要进行此更改,您只需单击“foreach”或“for”单词,并查找显示在左侧的螺丝刀图标,单击它并选择“转换为'for'”/“转换为'foreach'”。 (如果您从未看过此图标,请参见下面的链接) 希望它能帮助某人(即使这是一个非常古老的帖子!) Visual Studio螺丝刀图标

这应该是被接受的答案,因为它实际上告诉你如何做到这一点。 - Adam B
1
这被称为快速修复(在VS术语中),您可以在Mac上的VS上使用⌥↵来调用它(与Rider调用上下文操作或意图相同)。 - KenIchi

2

这个功能很好,就像 rdkleine 说的一样,示例运行得很好。
但是:如果你的集合只是一个简单的 IEnumerable<T>,它不会(合理地)工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接