2011-01-25 3 views
3

Возможно, я делаю это неправильно;IEqualityComparer значение строки внутри объекта

У меня есть список объектов в LINQ;

MyObj 
    string name 
    string somethingElse 

List<MyObj> myObjects; 

Теперь я пытаюсь выяснить, имеет ли какой-либо объект в этом списке строковое значение;

У меня есть;

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

В контрольном листе у меня;

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

Как использовать сопоставление для проверки строкового значения в поле объектов?

ответ

10

Простейшее метод должен сделать это:

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

А, я забыл о перегрузке 'Any', который принимает делегат предиката. +1 за это! –

+0

звучит правильно +1 – Divi

+0

Спасибо за это и за @Harry за то, что я не использую компаратор по-разному. – griegs

2

Вы можете использовать метод FindAll следующим образом:

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

я действительно только хочу, чтобы проверить, есть ли отдельный элемент в списке, который соответствует. Я знаю, что могу сделать подсчет, но хотел бы использовать компаратор – griegs

+0

+1 в свете @Harry – griegs

2

Равенство Comparer только хорошо говорить, если два объекта одного и того же типа, равны. Я не знаю вашего сценария использования, но вы могли бы просто сделать что-то вроде

if (Model.myObjects.Where(x => x.name == "thisobject").Any()) 
{ 
    // Do something 
} 
+0

А, хорошо ОК. Это делает смысл. Спасибо @Harry – griegs

Смежные вопросы