Ath*_*ena 4 c# linq list distinct
我正在尝试使用自定义相等比较器从列表中删除重复项,但我似乎无法做到正确.
简化示例:
class A
{
public A(string Test) { this.Test = Test; }
public string Test;
public string ToString() { return Test; }
}
class AsComparer: EqualityComparer<A>
{
public override bool Equals(A x, A y)
{
return (x.Test == y.Test);
}
public override int GetHashCode(A obj)
{
return obj.Test.GetHashCode();
}
}
static private void Test()
{
var As = new List<A> { new A("Test1"), new A("Test3"), new A("Test1"), new A("Test2") };
As.Distinct(new AsComparer());
As.Sort((e1, e2) => { return (e1.Test.CompareTo(e2.Test)); });
}
Run Code Online (Sandbox Code Playgroud)
这将返回集合"Test1","Test1","Test2","Test3".我希望只有一个"Test1",但似乎无法弄清楚如何做到这一点.
有任何想法吗?
Distinct
返回一个IEnumerable<T>
,它不在源列表本身上运行.你必须这样做:
As = As.Distinct(new AsComparer()).ToList()
Run Code Online (Sandbox Code Playgroud)
您还可以在此处包括您的排序:
As = As
.Distinct(new AsComparer())
.OrderBy(x => x.Test)
.ToList()
Run Code Online (Sandbox Code Playgroud)
Distinct()
返回一个全新的IEnumerable
,所以:
var result =
As.
Distinct(new AsComparer()).
OrderBy(e => e.Test).
ToList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
96 次 |
最近记录: |