private Dictionary<HashSet<Flags>, int> dict;
字典在開始時使用 Unity 檢查器填充
public enum Flags
{
flag1,
flag2,
flag3
}
迭代字典確認它包含用于訪問的相同哈希集,但嘗試使用密鑰訪問總是回傳 KeyNotFoundException。手動測驗ContainsKey
也回傳 false。
uj5u.com熱心網友回復:
好吧,.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>());
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461603.html
上一篇:Laravel Inertia:重定向時切換rootView布局
下一篇:有熱控制時不應該捕獲-Unity