這不是通用方法的目的。如果你寫的方法有簽名:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something)
你正在定義「共享邏輯」。這意味着相同的邏輯必須適用於傳遞給該方法的每個T
。如果沒有,你必須使用某種約束約束的T
:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something) where T : ISomeInterface
現在你知道,每一個T
傳遞給方法必須實現ISomeInterface
,你可以在你的方法使用任何屬性或方法聲明上該界面。
對於不同類型的T
,該方法的內容不應該是不同的,但邏輯可能因爲您可以調用可能有不同實現的方法和屬性。如果它還不夠,你可以傳遞另一個參數 - 泛型委託或者其他一些基於T
的泛型類,它將爲你增加一些額外的邏輯。
在你的場景中,你想比較不同的傳遞類=>比較不能是你的方法的一部分,但它必須是你的實體的一部分,或者你必須傳遞額外的類/方法來做比較的方法。
直接在你的類實現比較可以實現IComparable<T>
接口,並聲明你的方法爲:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something) where T : IComparable<T>
爲了實現你的類以外的比較,你可以簡單地使用Func<T, T, int>
或實施IComparer<T>
:
public Dictionary<T, List<T>> CheckDuplicates<T>(T something, IComparer<T> comparer)
在這兩種情況下,我不確定這與實體框架有什麼關係,因爲您的方法的簽名與EF無關。
當你的意思是檢查不同的值,你試圖檢查什麼值? – Jethro
例如,如果我有'Plan.nm == Plan2.nm' – Cody
所以你想檢查EF生成的計劃的屬性? – Jethro