Сообщение Re: All должен кидать эксепшн на пустой последовательности от 17.11.2023 18:32
Изменено 17.11.2023 19:10 DreamWeaver
Re: All должен кидать эксепшн на пустой последовательности
Здравствуйте, Barbar1an, Вы писали:
B>мне шото кажется не логичным возращать false у All если элементов нет
B>а чего не true?
B>вот я ожидал что будет тру, а там чето фолз, а логичнее было бы выкинуть эксепшон, потому что нельяз ответить на такой вопрос одно значно
По мне, exception или возврат "false" было бы слишком запутанным.
Например, мне в функцию приходит объект некого сообщения "MyMessage", у которого есть коллекция объектов с ошибками "IEnumerable<MyError> Errors".
Предположим я могу обработать инстанс "MyMessage" только если в коллекции "Errors" нет ни одной ошибки со статусом "Severe".
Логично было бы написать простой код (пример выдуман для демонстрации кейса, я бы использовал конечно "Any" в подобном случае):
То есть мне нужно выразить простую мысль, что я могу продолжать только если нет ошибок со статусом "Severe". Есть там в коллекции другие ошибки, или нет, не важно.
Поэтому "пустая коллекция" это не особый случай — это просто коллекция без элементов. Если тебе важно, чтобы там что-то было, то нужно проверять отдельно.
B>мне шото кажется не логичным возращать false у All если элементов нет
B>а чего не true?
B>вот я ожидал что будет тру, а там чето фолз, а логичнее было бы выкинуть эксепшон, потому что нельяз ответить на такой вопрос одно значно
По мне, exception или возврат "false" было бы слишком запутанным.
Например, мне в функцию приходит объект некого сообщения "MyMessage", у которого есть коллекция объектов с ошибками "IEnumerable<MyError> Errors".
Предположим я могу обработать инстанс "MyMessage" только если в коллекции "Errors" нет ни одной ошибки со статусом "Severe".
Логично было бы написать простой код (пример выдуман для демонстрации кейса, я бы использовал конечно "Any" в подобном случае):
public void ProcessMessage(MyMessage message)
{
if(message.Errors.All(v=>v.ErrorStatus != ErrorStatuses.Severe))
{
//можно обрабатывать сообщение
}
}То есть мне нужно выразить простую мысль, что я могу продолжать только если нет ошибок со статусом "Severe". Есть там в коллекции другие ошибки, или нет, не важно.
Поэтому "пустая коллекция" это не особый случай — это просто коллекция без элементов. Если тебе важно, чтобы там что-то было, то нужно проверять отдельно.
Re: All должен кидать эксепшн на пустой последовательности
Здравствуйте, Barbar1an, Вы писали:
B>мне шото кажется не логичным возращать false у All если элементов нет
B>а чего не true?
B>вот я ожидал что будет тру, а там чето фолз, а логичнее было бы выкинуть эксепшон, потому что нельяз ответить на такой вопрос одно значно
По мне, exception или возврат "false" было бы слишком запутанным.
Например, мне в функцию приходит объект некого сообщения "MyMessage", у которого есть коллекция объектов с ошибками "IEnumerable<MyError> Errors".
Предположим я могу обработать инстанс "MyMessage" только если в коллекции "Errors" нет ни одной ошибки со статусом "Severe".
Логично было бы написать простой код (пример выдуман для демонстрации кейса, я бы использовал конечно "Any" в подобном случае):
То есть мне нужно выразить простую мысль, что я могу продолжать только если нет ошибок со статусом "Severe". Есть там в коллекции другие ошибки, или нет, не важно.
Поэтому "пустая коллекция" это не особый случай — это просто коллекция без элементов. Если тебе важно, чтобы там что-то было, то нужно проверять отдельно.
Если .NET в таких случаях начнет бросаться exception-ами или возвращать False, то это был бы сплошной mess.
B>мне шото кажется не логичным возращать false у All если элементов нет
B>а чего не true?
B>вот я ожидал что будет тру, а там чето фолз, а логичнее было бы выкинуть эксепшон, потому что нельяз ответить на такой вопрос одно значно
По мне, exception или возврат "false" было бы слишком запутанным.
Например, мне в функцию приходит объект некого сообщения "MyMessage", у которого есть коллекция объектов с ошибками "IEnumerable<MyError> Errors".
Предположим я могу обработать инстанс "MyMessage" только если в коллекции "Errors" нет ни одной ошибки со статусом "Severe".
Логично было бы написать простой код (пример выдуман для демонстрации кейса, я бы использовал конечно "Any" в подобном случае):
public void ProcessMessage(MyMessage message)
{
if(message.Errors.All(v=>v.ErrorStatus != ErrorStatuses.Severe))
{
//можно обрабатывать сообщение
}
}То есть мне нужно выразить простую мысль, что я могу продолжать только если нет ошибок со статусом "Severe". Есть там в коллекции другие ошибки, или нет, не важно.
Поэтому "пустая коллекция" это не особый случай — это просто коллекция без элементов. Если тебе важно, чтобы там что-то было, то нужно проверять отдельно.
Если .NET в таких случаях начнет бросаться exception-ами или возвращать False, то это был бы сплошной mess.