en mi aplicación de Silverlight 4, tengo una ObservableCollection que consiste en objetos de una clase y se define por una interfaz:Usando expresión lambda en una ObservableCollection
interface myInterface()
{
string Name { get; set; }
string Value { get; set; }
}
class myClass() : myInterface
{
...
}
ObservableCollection<myInterface> _collection;
Antes de añadir un nuevo elemento a la colección, me quiero asegurarme de que Name-Property no exista ya dentro de los elementos de la colección actual. Como no puedo trabajar con contiene, actualmente recorro todos los elementos y verifico cada elemento manualmente.
private bool CollectionContainsElement(string name2CheckAgainst)
{
foreach (myInterface item in _collection)
if (item.Name.Equals(name2CheckAgainst))
return true;
return false;
}
He leído que esto también se puede lograr a través de una expresión lambda, por lo que escribió lo siguiente:
if (!_collection.Contains(p => p.Name == name2CheckAgainst))
{
...
Pero ahora me sale un error, diciendo que la "expresión lambda no puede ser convertido al tipo "myInterface", porque no es de tipo delegado ". (La redacción puede diferir, ya que la traduje de la versión alemana)
No estoy seguro de qué tengo que cambiar para que funcione. using System.Linq;
está incluido. Y la segunda pregunta (o tal vez la pregunta principal): He leído que el tiempo de ejecución cambia de O (1) para el método Contiene() a O (n), que no es más rápido que mi verificación actual. Entonces, ¿tiene sentido cambiarlo a usar el lambda? Y, por último, ¿hay probablemente otro método para verificar una Nombre-Propiedad existente en mi clase?
Gracias de antemano,
Frank
muchas gracias, parece que he leído mal el ejemplo withe la lambda contiene en el método. Usar Any es obvio :) – Aaginor