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