в моем приложении 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), что не быстрее, чем моя текущая проверка. Так есть ли вообще смысл менять его на использование лямбды? И, наконец, есть ли другой метод проверки существующего свойства имени в моем классе?
Заранее спасибо,
Фрэнк