簡體   English   中英

C#通用通配符

[英]C# generic wildcards

我花了很多時間解決這個問題,但是我無法弄清楚。 我有以下Java方法簽名:

public static <T> boolean isSameCollectionSets(
    Collection<? extends Collection<T>> set1, 
    Collection<? extends Collection<T>> set2)

此方法采用T類型的集合的兩個集合。它在Java中工作。 同樣,編譯器在傳遞正確的參數時也可以自己獲得類型T。

現在,我想將此完全相同的方法移植到C#。 到目前為止,我有這個:

public static bool IsSameCollectionSets<T>(ICollection<T> set1, ICollection<T> set2) 
    where T : ICollection<T>

但是,當我嘗試在C#中執行以下操作時,此操作將失敗:

ICollection<List<int>> collection1 = new List<List<int>>();
ICollection<HashSet<int>> collection2 = new HashSet<HashSet<int>>();

var result = IsSameCollectionSets(collection1, collection2);

IsSameCollectionSets方法帶有下划線,並且編譯器顯示:

“無法從用法中推斷方法'bool IsSameCollectionSets(ICollection,ICollection)'的類型參數。嘗試顯式指定類型參數。”

現在,我嘗試顯式地指定類型參數,但是到目前為止,仍然沒有任何效果。

我的錯誤在哪里? 提前謝謝了!

感謝@Rob,我找到了一個可行的解決方案。

代替使用ICollection<T>我使用IEnumerable<T>

public static bool IsSameCollectionSets<T>(IEnumerable<IEnumerable<T>> set1,
IEnumerable<IEnumerable<T>> set2)

另外,與問題中的代碼相比,我使用接口進行實例化:

ICollection<IList<int>> collection1 = new List<IList<int>>();
ICollection<ISet<int>> collection2 = new HashSet<ISet<int>>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM