【发布时间】:2015-07-22 08:33:59
【问题描述】:
如果属性匹配正确,我正在尝试通过加入两个列表来创建一个列表。我正在使用以下命令:
FooList = TrackedStrings.Join (FooList,
str => str,
Foo => Foo.GetString (),
(str, Foo) => Foo,
new Comparer ())
.ToList ();
和下面的类比较:
public class Comparer : IEqualityComparer<string>
{
public bool Equals (string x, string y)
{
return y.Contains (x);
}
public int GetHashCode (string str)
{
return str.GetHashCode ();
}
}
现在,我的想法是我只想保留具有 GetString () 的项目,其中包含来自 TrackedStrings 的任何字符串。但是,它不起作用:比较器仅在字符串相等时才返回 true。例如,假设我们有两个列表:
List<string> TrackedActions = new List<string> { "Created", "Deleted" };
List<Foo> FooList = new List<FooList> { new Foo ("Created"), new Foo ("Deleted Something")};
使用当前命令,第二个 Foo 将从列表中删除 - 而不是匹配到 TrackedActions[1] 并被保留。
因此,我的问题是:为什么Comparer 没有按我预期的方式工作?
【问题讨论】: