【问题标题】:Distinct with custom comparer gives vauge error与自定义比较器不同会产生 vauge 错误
【发布时间】:2010-01-22 18:09:04
【问题描述】:

我有以下代码:

IEqualityComparer<WorkItem> comparer = 
     new LambdaComparer<WorkItem>((item1, item2) => item1.Type == item2.Type);

var someVar = Pad.Distinct(comparer);

(这个想法是每种类型都得到 1 个)
它给出了以下错误消息:

方法 'System.Linq.Enumerable.Distinct 的类型参数 (System.Collections.Generic.IEnumerable, System.Collections.Generic.IEqualityComparer)' 无法推断 从用法上。尝试明确指定类型参数。 490

我做过类似的事情,效果很好:

Pad = new Dictionary<WorkItem, Canvas>(new LambdaComparer<WorkItem>((x, y) => x.Id == y.Id, x => x.Id));

所以我不认为这是我的 LamdaComparer 类。

关于如何解决这个问题的任何想法? (我想我可以做一个 ForEach 并手动获取不同的值。)

【问题讨论】:

  • Instance.Pad 是 IEnumerable 类型的吗?如果不是,这将不起作用,因为该方法将相同的 T 作为类型参数引用到 IEnumerable 和 IComparer 参数。

标签: c# collections lambda


【解决方案1】:

由于PadDictionary,因此您需要IEqualityComparer&lt;KeyValuePair&lt;WorkItem, Canvas&gt;&gt;

所以,基本上,您传递给Distinct 的比较器的类型参数是不够的。 :(

所以你是对的,根据提供的代码,看起来LambdaComparer 不是问题所在。您只需要以不同的方式定义“比较器”变量。

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多