IequalityComparer String Value dentro del objeto
-
24-10-2019 - |
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?
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