Her*_*ton 12 .net c# boxing equality
我有一个object我想要检查与另一个人平等的情况object.
public static bool Equals(object a, object b)
{
return a.Equals(b);
}
Run Code Online (Sandbox Code Playgroud)
a = 1 (integer)和时出现问题b = 1 (ushort (or basically not integer)).我想知道这是否应该不会产生真实,但它确实会返回假...
编辑
更糟糕的是:
Hashtable ht = new Hashtable();
ht.Add((int)1, "SOME STRING");
ht.Add((short)1, "SOME STRING");
ht.Add((long)1, "SOME STRING");
Run Code Online (Sandbox Code Playgroud)
我认为价值'1'应该只允许一次.
Tim*_*ter 19
Int32.Equals(object)仅当另一个对象也是以下实例时才返回true Int32:
如果obj是Int32的实例并且等于此实例的值,则返回true;否则返回false.否则,错误.
在代码(ILSpy,.NET 4)中:
public override bool Equals(object obj)
{
return obj is int && this == (int)obj;
}
Run Code Online (Sandbox Code Playgroud)
因为obj is int返回false,你得到一个false.
编辑:ragarding到您的编辑(Hashtable使用"类似"键):如果您不想允许重复的对象使用Dictionary<int, string>替代(首选)或仅添加整数HashTable.