Pregunta

Posiblemente estoy haciendo esto de la manera incorrecta, pero;

Tengo una lista de objetos en Linq;

MyObj
  string name
  string somethingElse

List<MyObj> myObjects;

Ahora estoy tratando de ver si algún objeto en esa lista tiene un valor de cadena;

Así que tengo;

if (Model.myObjects.Contains("thisobject", new MyObjComparer()))
{
}

En el comparador que tengo;

public class MyObjComparer: IEqualityComparer<MyObj>
{
    public bool Equals(string containsString, MyObj obj)
    {
        return obj.name == containsString;
    }
}

¿Cómo puedo usar un comparador para verificar contra un valor de cadena en un campo de objetos?

¿Fue útil?

Solución

Un método más fácil es hacer esto:

if (Model.myObjects.Any(o => o.name == "thisobject"))
{
}

Otros consejos

Puede usar el método Findall de la siguiente manera:

foreach(var item in Model.myObjects.FindAll(x=>x.Contains("thisobject")))
{
 //Do your stuff with item  
}

El comparador de igualdad solo es bueno para saber si dos objetos del mismo tipo son iguales. No conozco tu caso de uso, pero ¿podrías simplemente hacer algo como

if (Model.myObjects.Where(x => x.name == "thisobject").Any())
{ 
    // Do something
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top