更新对象列表中是否存在对象字段?

问题描述 投票:0回答:4

我有2个对象列表,如下所示:

public class Object1
{
    public string Value1 {get; set;}
    public string Value2 {get; set;}
    public bool Exclude {get; set;}
}

第二个包含我想用来从第一个对象中排除值的值。

public class Object2
{
    public string Value1 {get; set;}
    public string Value2 {get; set;}

}

如果Value1和Value2同时与Object2中的两个属性都不匹配,如何编写将Exclude的值设置为true的内容?

List<Object1> object1 = new List<Object1>();
List<Object2> object2 = new List<Object2>();
c# .net
4个回答
2
投票

您可以尝试以下内容:

if(!listOfObject2.Any(x => x.Value1 == object1.Value1 
                        && x.Value2 == object1.Value2)
)
{
    object1.Exclude = true;
}

在上面的片段中,listOfObject2List<Object2>类型和object1类型的Object1


0
投票

如果您要查看的是从第一个列表中标记对象以进行排除,因为没有对象与第二个列表中的Value1和Value2属性匹配,您可以尝试使用ForEach

object1.ForEach(o1 => o1.Exclude = !object2.Any(o2 => o2.Value1 == o1.Value1 && o2.Value2 == o1.Value2));

0
投票

如果你有两个列表,这应该工作:

foreach (var obj1 in object1)
{
    obj1.Exclude = true;
    foreach (var obj2 in object2)
    {
        if (obj1.Value1.Equals(obj2.Value1)
            || obj1.Value1.Equals(obj2.Value2)
            || obj1.Value2.Equals(obj2.Value1)
            || obj1.Value2.Equals(obj2.Value2))
        {
            obj1.Exclude = false;
            break;
        }
    }
}

这会将Exclude初始化为true,然后遍历Object1列表并将其值与object2列表中每个Object2的值进行比较。如果找到匹配项,则将exclude设置为false并打破内部循环,因为它不再需要查看。如果它一直通过,Exclude保持真实。


0
投票

另一种方法是在Object1类上实现一个比较方法,它接受Object2并在属性匹配时返回true

public class Object1
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
    public bool Exclude { get; set; }

    public bool ValuesMatch(Object2 other)
    {
        return (other != null) &&
               Value1 == other.Value1 &&
               Value2 == other.Value2;
    }
}

然后,您可以在Linq语句中使用此方法:

object1.ForEach(o1 => o1.Exclude = object2.Any(o1.ValuesMatch));
© www.soinside.com 2019 - 2024. All rights reserved.