循环和 LINQ 重构

Visual Studio提供了多个重构,用于在循环和 LINQ 表达式之间转换。 可以通过 快速操作和重构 菜单(Ctrl+.)访问这些重构。

将 for 循环转换为 foreach 语句

applies to: C#,Visual Basic

此重构将 for 循环转换为 foreach 语句。 当不需要循环变量作为索引并想要简化代码时,它非常有用。

注释

转换为 foreach 快速操作重构仅适用于包含所有三个部分的循环:初始值设定项、条件和迭代器。

  1. 将插入符号放在关键字中 for

  2. Ctrl+ 或单击代码文件的边距中的 螺丝刀螺丝刀图标 图标。

    “转换为 foreach”菜单的屏幕截图。

  3. 选择“转换为”foreach”。 或者,选择 “预览更改 ”以打开 “预览更改 ”对话框,然后选择“ 应用”。

将 foreach 语句转换为 for 循环

applies to: C#,Visual Basic

此重构会将 foreach 语句转换为 for 循环。 当你需要使用循环变量来访问项或循环访问多维数组时,它很有用。

  1. 将插入符号放在或For Each关键字中foreach

  2. Ctrl+ 或单击代码文件的边距中的 螺丝刀螺丝刀图标 图标。

    “转换为”菜单的屏幕截图。

  3. 选择“转换为”for”。 或者,选择 “预览更改 ”以打开 “预览更改 ”对话框,然后选择“ 应用”。

  4. 由于重构引入了新的迭代计数变量, 因此“重命名 ”框显示在编辑器的右上角。 如果要为变量选择其他名称,请键入该变量,然后按 Enter 或在“重命名”框中选择“应用”。 如果不想选择新名称,请按 Esc 或选择 “应用” 以消除 “重命名 ”框。

注释

对于 C#,这些重构生成的代码对集合中的项的类型使用显式类型或 var 。 生成的代码中的类型(显式或隐式)取决于范围内的代码样式设置。 这些特定的代码样式设置是在 “工具>选项>文本编辑器>C#>代码样式>常规>”首选项下或在 EditorConfig 文件中的解决方案级别配置的。 如果在 “选项”中更改代码样式设置,请重新打开代码文件,使更改生效。

将 foreach 循环转换为 LINQ

适用于: C#

此重构将使用 IEnumerable 的 foreach 循环转换为 LINQ 查询或 LINQ 调用表单(也称为 LINQ 方法)。

注释

LINQ 语法通常比 foreach 循环效率低。 最好了解使用 LINQ 来提高代码的可读性时可能发生的任何性能权衡。

  1. 将光标置于关键字中 foreach

    使用 IEnumerable 示例的 Foreach 的屏幕截图。

  2. 按 (Ctrl.) 触发“快速操作和重构”菜单。

    “转换为 LINQ”菜单示例的屏幕截图。

  3. 选择“转换为 LINQ”或“转换为 Linq”(呼叫表单)。

    LINQ 查询结果示例的屏幕截图。

    LINQ 调用表单结果示例的屏幕截图。

代码示例

using System.Collections.Generic;

public class Class1
{
    public void MyMethod()
    {
        var greetings = new List<string>()
            { "hi", "yo", "hello", "howdy" };

        IEnumerable<string> enumerable()
        {
            foreach (var greet in greetings)
            {
                if (greet.Length < 3)
                {
                    yield return greet;
                }
            }

            yield break;
        }
    }
}

将 LINQ 转换为 foreach 语句

applies to: C#,Visual Basic

此重构会将 LINQ 查询语法 转换为 foreach 语句。

  1. 选择从此开始 from的整个 LINQ 查询。

    注释

    此重构只能用于转换用查询语法表示的 LINQ 查询,而不是方法语法。

  2. Ctrl+ 或单击代码文件的边距中的螺丝 刀螺丝刀图标 图标。

    “转换 LINQ to foreach 快速操作”菜单的屏幕截图。

  3. 选择“转换为”foreach”。 或者,选择 “预览更改 ”以打开 “预览更改 ”对话框,然后选择“ 应用”。

注释

对于 C#,这些重构生成的代码使用显式类型或 var 作为循环的 foreach 迭代变量。 生成的代码中的类型(显式或隐式)取决于范围内的代码样式设置。 这些特定的代码样式设置是在 “工具>选项>文本编辑器>C#>代码样式>常规>”首选项下或在 EditorConfig 文件中的解决方案级别配置的。 如果在 “选项”中更改代码样式设置,请重新打开代码文件,使更改生效。

简化 LINQ 表达式

适用于: C#

此重构简化了 < a0/> 的实例以及以下可枚举方法:、、、

删除对方法枚举的 .Where() 不必要的调用可提高可读性,在某些情况下会提高性能。

  1. 将光标置于 Visual Studio SomeEnumerableType.Where(<LambdaExpression>).Single() 实例中。

  2. 按 (Ctrl.) 触发“快速操作和重构”菜单。

  3. 选择 “简化 LINQ 表达式”。

    简化 LINQ 表达式的屏幕截图。