Используя лямбда-выражение в ObservableCollection

в моем приложении Silverlight 4 у меня есть ObservableCollection, которая состоит из объектов класса и определяется интерфейсом:

interface myInterface()
{
  string Name { get; set; }
  string Value { get; set; }
} 

class myClass() : myInterface
{
  ...
}

ObservableCollection<myInterface> _collection;

Перед добавлением нового элемента в коллекцию я хочу убедиться, что что свойство Name-Property еще не существует в текущих элементах коллекции. Поскольку я не могу работать с contains, в настоящее время я перебираю все элементы и проверяю каждый элемент вручную.

private bool CollectionContainsElement(string name2CheckAgainst)
{
  foreach (myInterface item in _collection)
    if (item.Name.Equals(name2CheckAgainst))
      return true;

  return false;
}

Я читал, что этого также можно добиться с помощью лямбда-выражения, поэтому я написал следующее:

if (!_collection.Contains(p => p.Name == name2CheckAgainst))
{
  ...

Но теперь я получаю сообщение об ошибке, в котором говорится, что «лямбда-выражение не может быть преобразовано в тип« myInterface », потому что это не делегатский тип ".(Формулировка может отличаться, так как я перевел ее с немецкой версии)

Я не уверен, что мне нужно изменить, чтобы она работала. с использованием System.Linq; включен. И второй вопрос (или, возможно, основной вопрос): я читал, что время выполнения меняется с O (1) для метода Contains () на O (n), что не быстрее, чем моя текущая проверка. Так есть ли вообще смысл менять его на использование лямбды? И, наконец, есть ли другой метод проверки существующего свойства имени в моем классе?

Заранее спасибо,
Фрэнк

5
задан Ian Nelson 28 November 2011 в 16:49
поделиться