此重构适用于:

1、C#

功能: 可以将使用 IEnumerables 的 foreach 循环轻松转换为 LINQ 查询或 LINQ 调用窗体(也称为 LINQ 方法)。

使用时机: 有一个使用 IEnumerable 的 foreach 循环,并且需要将该循环作为 LINQ 查询读取。

操作原因:更倾向于使用 LINQ 语法而不是 foreach 循环。 LINQ 使查询成为 C# 一流语言构造。 LINQ 可以减少文件中的代码量,使代码更易于读取,并允许不同的数据源具有类似的查询表达式模式。

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

将 foreach 循环转换为 LINQ 重构

1、请将光标置于 foreach 关键字。

1.jpg

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

2.jpg

3、选择“转换为 LINQ”或“转换为 Linq (调用窗体)”。

3.jpg

4.jpg

示例代码

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;
        }
    }
}