Определите, равно ли свойство вложенного объекта в списке - PullRequest
0 голосов
/ 07 мая 2020

У меня два класса: собственность и менеджер.

public class Property
{
    public Manager Manager {get;set;}
}

public class Manager {
    public int ID { get; set; }
    public string Fullname {get; set;}
}

Property p1 = new  Property{
    Manager = new Manager {
        ID = 1,
        Fullname = "John  Doe"
    }
}

Property p2 = new  Property{
    Manager = new Manager {
        ID = 1,
        Fullname = "John  Doe"
    }
}

Property p3 = new  Property{
    Manager = new Manager {
        ID = 2,
        Fullname = "John  Doe"
    }
}

List<Property> properties = new List{ p1, p2, p3 }

В этом List из properties, как я могу определить, что каждое свойство имеет одного и того же Менеджера ID? Если одного или нескольких нет, я хочу вернуть false.

Ответы [ 4 ]

1 голос
/ 07 мая 2020

Вы можете использовать бит System.Linq, чтобы определить, совпадают ли элементы All с Id с элементом First:

bool allHaveSameId = properties.All(p => p.Manager.ID == properties.First().Manager.ID);
0 голосов
/ 07 мая 2020
return properties.Select(p => p.Manager.ID).Distinct().Count() == 1;
0 голосов
/ 07 мая 2020

Думаю, я бы go со ссылкой на что-то подобное в комментарии;

  return properties.Any() && properties.All(p=>p.Manager.ID == properties[0].Manager.Id);
0 голосов
/ 07 мая 2020

Вы можете просто переопределить Equals как в свойстве, так и в Manager

public class Manager{
    public int ID { get; set; }
    public string Fullname {get; set;}

    public override bool Equals(Manager that){
        if ((obj == null) || ! this.GetType().Equals(obj.GetType())){
            return false;
        }else {
            return this.ID == that.ID;
        }
    }
}

public class Property{
    public Manager Manager {get;set;}

    public override bool Equals(Property that){
        if ((obj == null) || ! this.GetType().Equals(obj.GetType())){
            return false;
        }else {
            return this.manager.Equals(that.Manager);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...