低调不是骚 2018-12-22 15:41 采纳率: 0%
浏览 721
已结题

关于C#List数组取交集的问题

代码如下:

public class Group
{
        public List<Field> FieldList { get; set; } = new List<Field>();
        public string GroupId { get; set; }
        public string GroupName { get; set; }
        //重写Equals
        public override bool Equals(object obj)
        {
                Group group = obj as Group;
                if (group == null) return false;
                if (this.GetType() != group.GetType()) return false;
                return this.FieldList.Equals(group.FieldList);
        }

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

public class Field
{
        public bool ContactClientFlag { get; set; }
        public bool ContactFlag { get; set; }
        //重写equals
        public override bool Equals(object obj)
        {
                    Field field = obj as Field;
                    if (this.GetType() != field.GetType()) return false;    
                    return (this.ContactClientFlag == field.ContactClientFlag)&&(this.ContactFlag== field.ContactFlag;  
        }
        public override int GetHashCode()
        {
                                    int hashCode = this.ContactClientFlag.GetHashCode();
                hashCode += this.ContactFlag.GetHashCode();
                return hashCode;
        }               
}
上述为两个类,Group和Field类。其中 Group类的一个属性是List<Field>类型。
我生成两个List<Group>类型数组,求交集代码如下:

Field field_1 =new Field(){
    ContactClientFlag = FALSE,
    ContactFlag = TRUE
};
List<Field> fieldList_1 = new List<Field>();
fieldList_1.Add(field_1);
Group group_1 =new Group(){
    GroupId = "222",
    GroupName = "test",
    FieldList = fieldList_1
};
List<Group> groupList_1 = new List<Group>();
groupList_1.Add(group_1);

Field field_2 =new Field(){
    ContactClientFlag = FALSE,
    ContactFlag = TRUE
};
List<Field> fieldList_2 = new List<Field>();
fieldList_2.Add(field_2);
Group group_2 =new Group(){
    GroupId = "222",
    GroupName = "test",
    FieldList = fieldList_2
};
List<Group> groupList_2 = new List<Group>();
groupList_2.Add(group_2);

public class GroupEquality : IEqualityComparer<Group>
{
        public bool Equals(Group left, Group right)
        {
                return left.FieldList.Equals(right.FieldList);
        }

        public int GetHashCode(IntelUserModel obj)
        {
                return obj.FieldList.GetHashCode();
        }
}
List<Group> noChange = groupList_1.Intersect(groupList_2, new GroupEquality()).ToList();

可是求出来的noChange数组的Count属性为0,该怎么办呢?

  • 写回答

2条回答

  • devmiao 2018-12-22 15:29
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败