в моем приложении Silverlight 4 у меня есть ObservableCollection, которая состоит из объектов класса и определяется интерфейсом:
interface myInterface()
{
string Name { get; set; }
string Value { get; set; }
}
class myClass() : myInterface
{
...
}
ObservableCollection<myInterface> _collection;
Прежде чем добавить новый элемент в коллекцию, я хочу убедиться,, что Name-Property еще не существует в текущих элементах коллекции.Поскольку я не могу работать с содержимым, я в настоящее время перебираю все элементы и проверяю каждый элемент вручную.
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 », поскольку он не является типом делегата».(Формулировка может отличаться, поскольку я перевел ее с немецкой версии)
Я не уверен, что мне нужно изменить, чтобы это работало.using System.Linq;
включено.И второй вопрос (или, может быть, основной вопрос): я прочитал, что время выполнения меняется с O (1) для метода Contains () - на O (n) - что не быстрее, чем моя текущая проверка.Так есть ли смысл менять его на использование лямбды?И, наконец, есть ли другой способ проверки существующего Name-свойства в моем классе?
Заранее спасибо,
Frank