簡體   English   中英

C# 字典找不到 HashSet 類型的 Key<enum></enum>

[英]C# Dictionary can't find Key of type HashSet<enum>

private Dictionary<HashSet<Flags>, int> dict;

使用 Unity 檢查器在開始時填充字典

public enum Flags
{
    flag1,
    flag2,
    flag3
}

迭代字典確認它包含用於訪問的相同哈希集,但嘗試使用密鑰訪問總是返回 KeyNotFoundException。 使用ContainsKey手動測試也會返回 false。

好吧,.Net 默認情況下通過引用比較類,例如

// A and B has same values, but different references
var A = new HashSet<Flags>() { Flags.flag1 };
var B = new HashSet<Flags>() { Flags.flag1 };

// Not Equals, since A and B doesn't share the same reference:
if (A.Equals(B)) 
  Console.Write("Equals");
else
  Console.Write("Not Equals");

如果你想按比較,你應該實現IEqualityComparer<T>接口:

    public class HashSetComparer<T> : IEqualityComparer<HashSet<T>> {
      public bool Equals(HashSet<T> left, HashSet<T> right) {
        if (ReferenceEquals(left, right))
          return true;
        if (left == null || right == null)
          return false;

        return left.SetEquals(right);
      }

      public int GetHashCode(HashSet<T> item) {
        return item == null ? -1 : item.Count;
      }
    }

並使用它:

private Dictionary<HashSet<Flags>, int> dict = 
  Dictionary<HashSet<Flags>, int>(new HashSetComparer<Flags>());

暫無
暫無

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

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