@Ledington

Как поймать исключение в свойстве и вывести его?

Никак не пойму как поймать исключение в свойстве, когда стек пустой.

Есть вызов свойства:
Console.WriteLine($"Количество элементов в стеке: <{s.Size}>, верхний элемент стека: <{(s.Top == null ? "null" : s.Top)}>");


Само свойство:
public string Top
        {
            get
            {
                return _elements.Last();
            }
        }


Но вместо вывода нормального сообщения или чего-либо еще он мне выкидывает ошибку с исключением InvalidOperationException.
Как мне поймать это исключение и вывести свое сообщение?
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
Вообще, кидать исключения в свойствах - такое себе.
В вашем случае стоит сделать так:
public string? Top => _elements.LastOrDefault(); // Обычный метод Last кидает исключение, если коллекция пустая

Если бы так нельзя было бы сделать, пришлось бы завернуть всё в try-catch. Например так:
string? top = null;
try {
  top = s.Top;
catch {}
Console.WriteLine($"Количество элементов в стеке: <{s.Size}>, верхний элемент стека: <{(top == null ? "null" : top)}>");

Кстати, чтобы дважды не вычислять s.Top в тернарнике - можно использовать сопоставление с образцом
s.Top is {} t ? t : "null";

Ещё вариант - оставить всё как есть, но иначе составлять сообщение:
var msg = s switch {
  { Size: 0 } => $"Стек пуст",
  { Size: var size, Top: var top} => $"Количество элементов в стеке: <{size}>, верхний элемент стека: <{top}>"
};
Console.WriteLine(msg);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы