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

Joe*_*Joe 4 c# linq resharper

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

有人知道我在想什么吗?

  • 我正在导入System.Collections.Generic和System.Linq命名空间。
  • 我的项目中确实有对System.Core的引用。
  • 我在参考管理器中找不到任何名为“ System.Linq”的程序集以添加对它的参考,尽管我之前已经看过该建议。
  • 我在标题中看到带有“ Linq”的唯一程序集是System.Xml.Linq和System.Data.Linq。尝试添加这些内容,但那无济于事(我也不希望这样做)
  • 尽管Visual Studio找不到Append,但似乎Resharper以某种方式可以找到。下面的更多内容。

还有其他我必须添加引用的程序集吗?还是这是一种较新的扩展方法?我的目标是.NET 4.7和更高版本的Windows 10机器

这是我整理的一些示例代码,放在我的相同源文件中以说明问题。

// 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);
Run Code Online (Sandbox Code Playgroud)

一件奇怪的事情:为了解决这个问题,我单击了“联合”函数名称上的“转到定义”。它带我到了JetBrains反编译器缓存中的Enumerable.cs的反编译版本。在那里,我看到了Union的实现,并且看到了Append的实现。

好像很奇怪 因此,作为实验,我尝试禁用Resharper并再次单击“转到定义”。这次,我带我去了一个Visual Studio编译的Enumerable.cs,它具有Union但没有Append。

Mar*_*ell 5

编译器是正确的。在.NET Framework 4.7.1中添加了此方法-我认为JetBrains在获取参考源而不过滤版本。因此:请更改为4.7.1,否则将不使用该方法。

您可以在MSDN中的“适用于”下查看版本历史记录