编译器找不到 IEnumerable.Append 但可以找到 Union 和其他扩展
Compiler cannot find IEnumerable.Append but can find Union and other extensions
我正在尝试使用 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 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,或者没有这个方法。
下查看版本历史
我正在尝试使用 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 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,或者没有这个方法。
下查看版本历史