奇怪的Int64.Equals行为

par*_*agy 3 c# types

为什么这个测试失败了?

    [Test]
    public void Int64Test()
    {

        Int64Keys ObjBigInt = new Int64Keys();
        ObjBigInt.Id = 0;
        PropertyInfo p = ObjBigInt.GetType().GetProperty("Id");
        var IDValue = p.GetValue(ObjBigInt, null);
       //var IDType = IDValue.GetType(); //returns {System.Int64}
        Assert.IsTrue(IDValue.Equals(0)); //is returning  false and the type if IDValue is Int64()


    }

   public class Int64Keys
    {
        public Int64 Id { get; set; }
    }
   public class Int32Keys
    {
        public Int32 Id { get; set; }
    }
    public class DoubleKeys
    {
        public double Id { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

提到了这个问题,但没有足够的想法来解决这个问题.

编辑:我正在使用Repository模式,所以我的实例可以是任何类型(Int32,Int64,double).

cdh*_*wie 5

你正在比较盒装longint.盒装基元将与任何不完全属于其自身类型的对象进行比较.改变这一行:

Assert.IsTrue(IDValue.Equals(0));
Run Code Online (Sandbox Code Playgroud)

对此:

Assert.IsTrue(IDValue.Equals(0L));
Run Code Online (Sandbox Code Playgroud)