Список <T>. Содержит не показывает перегрузки

2

Я уверен, что здесь отсутствует что-то простое, но в Visual Studio 2008 в моем текущем проекте присутствует только List.Contains(T). Возможность использования List.Contains(T, IEqualityComparer (T)) сэкономит мне много горя. Быстрые мысли об этом? Благодарю.

* Редактирование: использование System.Linq недоступно для меня. Возможно ли, что мой проект застрял в .net 2.0 или что-то в этом роде? В любом случае, чтобы проверить и исправить?

Теги:
linq
generics

4 ответа

8
Лучший ответ

Обязательно укажите System.Linq и включите его (используя System.Linq) в пространствах имен.

Второй вызов, на который вы ссылаетесь, на самом деле Enumerable.Contains в System.Linq.


Изменить в ответ на комментарии:

Вы можете создать свою собственную версию:

public void ContainedInList(IEnumerable<T> list, T value, IEqualityComparer<T> comparer)
{
    foreach(T element in list)
    {
        if (comparer.Equals(element, value))
            return true;
    }
    return false;
}
  • 0
    Спасибо за ответ. Эта опция не доступна для меня.
  • 0
    Извините - вот откуда появился этот метод. Вы можете написать свой собственный метод содержит, который берет список и выполняет эту проверку, хотя это было бы довольно просто. Я предполагаю, что вы нацелены на .NET 2.0, а не на 3.5.
Показать ещё 3 комментария
3

Чтобы проверить, соответствует ли ваша целевая среда 2.0, Проект > Свойства, на вкладке Приложения вы увидите "Целевая структура"

Установите значение .NET Framework 3.5.

Если это значение установлено, System.Linq должно быть доступно вам.

1

Убедитесь, что целевая среда проекта (доступна в диалоговом окне свойств проекта) установлена ​​на .NET 3.5.

1

Даже если вы застряли в .NET 2.0, вы все равно можете определить метод расширения, если вы работаете с компилятором С# 3 (то есть в Visual Studio 2008).

По этот пост от Daniel Moth, вам нужно только определить класс ExtensionAttribute где-то в вашем коде:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute 
    {
    }
}

Теперь определите новый метод "Содержит":

public static class MyExtensions
{
    public static Contains<T>(this IEnumerable<T> list,
        T item, IEqualityComparer<T> comparer)
    {
        foreach (var i in list) if (comparer.Equals(item, i)) return true;
        return false;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню