2010-01-22 44 views
3

我有以下代碼:DISTINCT與自定義比較給vauge錯誤

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

var someVar = Pad.Distinct(comparer); 

(的想法是讓每類1)
它是給下面的錯誤信息:

 
The type arguments for method 'System.Linq.Enumerable.Distinct 
(System.Collections.Generic.IEnumerable, 
System.Collections.Generic.IEqualityComparer)' cannot be inferred 
from the usage. Try specifying the type arguments explicitly. 490 

我已經做了類似的事情,它工作得很好:

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

小號o我不認爲這是我的LamdaComparer類。

有關如何解決此問題的任何想法? (我想我可以做一個ForEach並手動獲取不同。)

+1

是IEnumerable類型的Instance.Pad ?如果沒有,這將不起作用,因爲該方法引用了IEnumerable和IComparer參數的同一T作爲類型參數。 – driis 2010-01-22 18:12:10

回答

1

由於PadDictionary,您需要一個IEqualityComparer<KeyValuePair<WorkItem, Canvas>>

所以,基本上,你傳遞給Distinct的比較器的typeparams是不夠的。 :(

所以,你是對的,根據所提供的代碼,它看起來像LambdaComparer是沒有問題的。你只需要定義你的「比較器」變量是不同的。

+0

絕對正確!謝謝。 – Vaccano 2010-01-22 18:31:22