编译器找不到 IEnumerable.Append 但可以找到 Union 和其他扩展

Compiler cannot find IEnumerable.Append but can find Union and other extensions

我正在尝试使用 IEnumerable.Append 扩展方法,但 Visual Studio 2017 抱怨它不存在。但与此同时,可以找到其他扩展方法,例如 Union。这对我来说毫无意义。

有人知道我错过了什么吗?

我必须添加对其他程序集的引用吗?或者这是一些更新的扩展方法?我的目标是 .NET 4.7 及更高版本 Windows 10 box

下面是我编写的一些示例代码,并放在我的同一个源文件中以说明问题。

// Using statements.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

// Append fails to build but Union succeeds...???

IEnumerable<int> vals1 = new List<int>{ 0, 1, 2 };
IEnumerable<int> vals2 = new List<int>{ 3, 4, 5 };
IEnumerable<int> vals3 = vals1.Append(7);    //<-- ERROR.  "Append" not found
IEnumerable<int> vals4 = vals1.Union(vals2);

一件奇怪的事情:为了弄清楚这一点,我在 "Union" 函数名称上单击了 "Go to Definition"。它把我带到了 JetBrains 反编译器缓存中 Enumerable.cs 的反编译版本。在那里我看到了 Union 的实现,我看到了 Append.

的实现

这看起来很奇怪。因此,作为一项实验,我尝试禁用 Resharper 并再次单击 "Go to Definition"。这次它带我到一个 Visual Studio 反编译 Enumerable.cs 它有 Union 但没有 Append.

编译器是对的;这个方法是在 .NET Framework 4.7.1 中添加的——我想 JetBrains 正在获取参考源而不过滤版本。所以:换到 4.7.1,或者没有这个方法。

您可以在"Applies To" in MSDN

下查看版本历史