Я уверен, что здесь отсутствует что-то простое, но в Visual Studio 2008 в моем текущем проекте присутствует только List.Contains(T). Возможность использования List.Contains(T, IEqualityComparer (T)) сэкономит мне много горя. Быстрые мысли об этом? Благодарю.
* Редактирование: использование System.Linq недоступно для меня. Возможно ли, что мой проект застрял в .net 2.0 или что-то в этом роде? В любом случае, чтобы проверить и исправить?
Обязательно укажите 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;
}
Чтобы проверить, соответствует ли ваша целевая среда 2.0, Проект > Свойства, на вкладке Приложения вы увидите "Целевая структура"
Установите значение .NET Framework 3.5.
Если это значение установлено, System.Linq
должно быть доступно вам.
Убедитесь, что целевая среда проекта (доступна в диалоговом окне свойств проекта) установлена на .NET 3.5.
Даже если вы застряли в .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;
}
}