簡體   English   中英

我可以在C#中將對象強制轉換為其通用類型嗎?

[英]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.

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