ObservableCollection.Remove()不调用重写的.Equals()

时间:2018-06-29 05:23:22

标签: c# xamarin.forms observablecollection

我正在Xamarin中使用c#,并且在列表视图中有一个可观察的集合,其中包含项目。当我尝试使用.Remove()删除这些项目时,它返回false,并且该项目保留在列表中。我已经在对象中实现了Equals()和GetHashCode(),当我打印其结果时,我发现remove不会调用Equals。

我知道列表中的项目与我要删除的项目之间的对象引用将是不同的,这就是为什么我实现了Equals()的覆盖

using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace CustomRenderer
{
    public class FishObject
    {
        public string Comment { get; set; }
        public double Latitude { get; set; }
        public double Longitude { get; set; }
        public string Address { get; set; }
        public int NumberOfFish { get; set; }
        public DateTime createdAt { get; set; }
        public string ContactInfo { get; set; }
        public Image Picture { get; set; }
        public string Id { get; set; }

        public override bool Equals(Object obj)
        {
            FishObject fishObj = obj as FishObject;
            if (fishObj == null)
            {
                return false;
            }
            else
            {
                var number = this.NumberOfFish == fishObj.NumberOfFish;
                var coment = this.Comment == fishObj.Comment;
                var lat = this.Latitude == fishObj.Latitude;
                var lon = this.Longitude == fishObj.Longitude;
                var contact = this.ContactInfo == fishObj.ContactInfo;
                var result = number && coment && lat && lon && contact;
                System.Diagnostics.Debug.WriteLine("Equals res: " + result);
                return result;
            }
        }

        public override int GetHashCode()
        {
            return (this.Comment).GetHashCode();
        }

    }
}

1 个答案:

答案 0 :(得分:0)

嗯,我很傻。这是一个大写问题。感谢您的所有帮助,小提琴确实帮助我找到了它。