我有公司类内的人员名单.
public class Company{
IList<Person> persons;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个公司列表,
IList<Company> companies;
Run Code Online (Sandbox Code Playgroud)
现在我有一个名字(说"Lasantha").如果这个名字是公司任何人姓名的一部分,我想找到那家公司.我尝试过使用companies.Contains()方法.我在Person类中覆盖了object.Equals方法,如下所示,
public override bool Equals(object o)
{
var other = o as Person;
return this.Name.ToLower().Contains(other.Name.ToLower());
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它也没有称这种Equal方法.有谁可以帮助我吗.
谢谢.
以这种方式覆盖相等比较是错误的.
平等应该是可传递的:如果
"FooBar".Equals("Foo") == true
Run Code Online (Sandbox Code Playgroud)
那么它也必须坚持下去
"Foo".Equals("FooBar") == true
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,你使用Contains哪个会破坏传递性,因为"FooBar"包含"Foo",但"Foo"不包含"FooBar".除此之外,你不应该Equals在类上覆盖该方法,除非该类的对象之间的每个最后比较具有相同的语义(在这种情况下看起来非常可疑).
所以,考虑到压倒Equals不是解决方案,你应该怎么做?
一种方便的方法是使用LINQ:
var companiesWithPeopleWithLasanthaInTheirName =
companies.Where(c => c.persons.Any(p => p.Name.Contains("Lasantha")));
Run Code Online (Sandbox Code Playgroud)
但是上面的比较是区分大小写的,所以如果你不需要它,你必须调整它; 这个问题有一个答案:不区分大小写'包含(字符串)'
| 归档时间: |
|
| 查看次数: |
16124 次 |
| 最近记录: |