2011-01-25 46 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")) 
{ 
} 
2

可以使用的FindAll方法如下:

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

我真的只是想检查一下,看是否有单个项目在匹配的列表中。我知道我可以做一个计数,但想用@Harry – griegs 2011-01-25 00:12:50

+0

+1啊,对了。这使得sence。谢谢@哈里 – griegs 2011-01-25 00:14:24

2

的相等比较是唯一的好分辨同一类型的两个对象是相等的。我不知道你的用例,但可以你只需做类似

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

这个比较器 – griegs 2011-01-25 00:13:28