Вам не нужно создавать свой собственный словарь - вам нужно создать свою собственную реализацию IEqualityComparer
, которая использует личность для хэширования и равенства. Я не думаю , что такая вещь существует в структуре, но ее достаточно легко построить из-за RuntimeHelpers.GetHashCode
.
public sealed class IdentityEqualityComparer : IEqualityComparer
where T : class
{
public int GetHashCode(T value)
{
return RuntimeHelpers.GetHashCode(value);
}
public bool Equals(T left, T right)
{
return left == right; // Reference identity comparison
}
}
I 'ограничено T
как ссылочный тип, чтобы вы получили объекты в словаре; если вы использовали это для типов значений, вы могли бы получить некоторые нечетные результаты. (Я не знаю, как это работает, я подозреваю .)
С этим на месте остальное легко. Например:
Dictionary identityDictionary =
new Dictionary(new IdentityEqualityComparer());