Софтуерно Инженерство
Loading...
kaloyan_kolev avatar kaloyan_kolev 9 Точки

Oldest Family Member от Defining Classes

Здравейте,

(УСЛОВИЕТО: https://softuni.bg/trainings/resources/officedocument/40531/exercise-problem-descriptions-csharp-advanced-may-2019/2348)

разглеждам два варианта за връщане на най-възрастния от семейството:

public Person GetOldestMember()
{
    Person oldestPerson = people.OrderByDescending(x => x.Age).FirstOrDefault();

    return oldestPerson;
}
public Person GetOldestMember()
{
    Person oldestPerson = new Person(-1); //constructor with parameter age

    foreach (Person person in people)
    {
        if (person.Age > oldestPerson.Age)
        {
            oldestPerson = person;
        }
    }

    return oldestPerson;
}

С първия вариант програмата работи 100/100, а с втория 60/100. Единствената разлика, която виждам е, че първият метод ще върне null за празен лист, а втория Person обект с Name = "No name" и Age въведеното число. (от конструктура) Какви са тестовете, които прецакват втория?

Тагове:
0
C# Advanced 12/06/2019 22:49:41
TeodorStefanovPld avatar TeodorStefanovPld 1285 Точки

примерно празен вход ? :Д а и каква е логиката да връщаш 

Person oldestPerson = new Person(-1); ако нямаш oldest person? при празен лист теста ще очаква null..а ти му връщаш person с age-1 ?

 

0
kaloyan_kolev avatar kaloyan_kolev 9 Точки

Добре, но ако oldestPerson върне null, т.е. са ни подали празен лист, когато се опитам да достъпя oldestPerson.Name, не връща ли NullReferenceException? Явно това се очаква да върне. Може би моето решение ще бъде адекватно, ако проверявам дали oldestPerson.Age > -1, т.е. сме го променили.

0
13/06/2019 07:42:14
TeodorStefanovPld avatar TeodorStefanovPld 1285 Точки
public Person GetOldestMember()
{
    Person oldestPerson = people.OrderByDescending(x => x.Age).FirstOrDefault();

    return oldestPerson;
}

това ще ти върне null ако беше first тогава щеше да хвръли exception. А какво се случва нататък не знам не виждам пълния код коментирам само което виждам 

0