[英]In C# can you up-cast an object type to a collection type of generic "object"s
[英]can I cast an object to it's generic type in C#?
很抱歉再次提出這個問題。 我已經在這里閱讀了幾個小時的相關主題,但仍然不太了解有關轉換和泛型的一些問題。 我正在嘗試創建自己的HashSet類,因為我們尚不能使用.net 3.5。
錯誤在下面的RetainAll方法中。 它可以很好地編譯,但是在foreach語句上出現運行時錯誤“無法將類型為System.Collections.DictionaryEntry的對象轉換為類型為mycompany.UnivID”。
這是否意味着我不能將泛型對象強制轉換為其實現類型? 我已經嘗試了幾件事
foreach ((T) obj in set)
但它們不會編譯。
相關代碼為:
public sealed class HashSet<T> : ISet<T> {
private readonly Hashtable set;
public HashSet() {
this.set = new Hashtable();
}
public void RetainAll(ISet<T> c) {
lock (set) {
foreach (T obj in set) {
if (!c.Contains(obj))
this.set.Remove(obj);
}
}
}
}
實現類代碼段是
public sealed class UnivIDSet : ISet {
private readonly ISet<UnivID> univIDs;
public UnivIDSet() : base() {
univIDs = new HashSet<UnivID>();
}
}
然后我們得到了UnivID
類,它實際上是集合中的對象。
我認為
foreach (T obj in set) {
應該
foreach (T obj in set.Values) {
枚舉HashTable時,枚舉數返回的類型為DictionaryEntry。 閱讀此對象的鍵和值屬性以獲取所需的內容。
哈希表將鍵映射到值。 當您遍歷哈希表中的每個項目時,該項目是鍵/值對(這就是DictionaryEntry類)。 您可能要改為遍歷Keys屬性或Values屬性,具體取決於您如何在表中輸入內容。
另請注意,Dictionary類是哈希表的通用版本,因此可能值得在其之上構建HashSet。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.