gpt4 book ai didi

linq - 匿名类型的IEqualityComparer

转载 作者:行者123 更新时间:2023-12-03 08:41:52 26 4
gpt4 key购买 nike

我有这个

 var n = ItemList.Select(s => new { s.Vchr, s.Id, s.Ctr, s.Vendor, s.Description, s.Invoice }).ToList();
n.AddRange(OtherList.Select(s => new { s.Vchr, s.Id, s.Ctr, s.Vendor, s.Description, s.Invoice }).ToList(););

如果可以的话,我想这样做
n = n.Distinct((x, y) => x.Vchr == y.Vchr)).ToList();

我尝试使用通用 LambdaComparer,但由于即时通讯使用匿名类型,因此没有将其与类型关联的类型。

“帮我欧比万基诺比,你是我唯一的希望”

最佳答案

诀窍是创建一个仅适用于推断类型的比较器。例如:

public class Comparer<T> : IComparer<T> {
private Func<T,T,int> _func;
public Comparer(Func<T,T,int> func) {
_func = func;
}
public int Compare(T x, T y ) {
return _func(x,y);
}
}

public static class Comparer {
public static Comparer<T> Create<T>(Func<T,T,int> func){
return new Comparer<T>(func);
}
public static Comparer<T> CreateComparerForElements<T>(this IEnumerable<T> enumerable, Func<T,T,int> func) {
return new Comparer<T>(func);
}
}

现在,我可以执行以下... hacky解决方案:
var comp = n.CreateComparerForElements((x, y) => x.Vchr == y.Vchr);

关于linq - 匿名类型的IEqualityComparer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com