Компилятор не может найти IEnumerable.Append, но может найти Union и другие расширения - PullRequest
4 голосов
/ 27 марта 2019

Я пытаюсь использовать метод расширения 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);

Одна странная вещь: чтобы попытаться это выяснить, я нажал «Перейти к определению» в названии функции «Объединение». Это привело меня к декомпилированной версии Enumerable.cs в кеше декомпилятора JetBrains. Там я увидел реализацию Union и увидел реализацию Append.

Это казалось странным. В качестве эксперимента я попытался отключить Resharper и снова нажать «Перейти к определению». На этот раз он отвез меня в Visual Studio, декомпилированную Enumerable.cs, в которой есть Union, но не имеет Append.

1 Ответ

5 голосов
/ 27 марта 2019

Компилятор прав; этот метод был добавлен в .NET Framework 4.7.1 - Я полагаю, что JetBrains получает эталонный источник без фильтрации по версии. Итак: перейдите на 4.7.1 или живите без метода.

Вы можете просмотреть историю версий в разделе «Относится к» в MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...