加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – List.Except不使用自定义Equals函数

发布时间:2020-12-16 00:10:50 所属栏目:百科 来源:网络整理
导读:public class eq : IEquatableeq { public string s1; public string s2; public override bool Equals(object obj) { if (obj == null) return false; eq o = obj as eq; if (o == null) return false; return Equals(o); } public bool Equals(eq o) { if
public class eq : IEquatable<eq>
    {
        public string s1;
        public string s2;
        public override bool Equals(object obj)
        {
            if (obj == null) return false;
            eq o = obj as eq;
            if (o == null) return false;
            return Equals(o);
        }
        public bool Equals(eq o)
        {
            if (s1==o.s1 && s2==o.s2)
                return true;
            return false;
        }
        public eq (string a,string b)
        {
            s1 = a;
            s2 = b;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<eq> l1 = new List<eq>();
            List<eq> l2 = new List<eq>();
            l1.Add(new eq("1","1"));
            l1.Add(new eq("2","2"));
            l1.Add(new eq("3","3"));
            l2.Add(new eq("3","3"));
            l2.Add(new eq("1","1"));
            var b= l1.Contains(new eq("1","1"));
            var v = l1.Except(l2);
        }
    }

l1.contains语句调用自定义函数并返回预期结果

l1.Except不会导致调用自定义函数并返回l1的全部内容

有没有办法在不明确编写循环的情况下完成此操作?

解决方法

除非工作正常,否则应覆盖GetHashCode方法.例如

public override int GetHashCode()
{
    int hash = 19;
    hash = hash * 23 + (s1 == null) ? 0 : s1.GetHashCode();
    hash = hash * 23 + (s2 == null) ? 0 : s2.GetHashCode();
    return hash;
}

除了执行设置操作之外(在内部它用来自第二序列的项填充Set< T>并尝试将项从第一序列添加到同一组).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读