Здравствуйте, Aquilaware, Вы писали:
A>Вместо такого ужаса теперь посмотрим на произведение исскуства, на картину Художника:
A>A>if (TryGetBicycle() is not null and var bicycle)
A> Console.WriteLine("Bicycle owner is {0}.", bicycle.Owner);
A>else if (TryGetMotorcycle() is not null and var motorcycle)
A> Console.WriteLine("Motorcycle owner is {0}.", motorcycle.Owner);
A>else if (TryGetCar() is not null and var car)
A> Console.WriteLine("Car owner is {0}.", car.Owner);
A>else
A> // ... красота на любом уровне "вложенности"! ...
A>
Для произведения искусства тут слишком много копипасты. Как по мне, я бы сделал список типов (Bicycle, Motorcycle, Car) и проверял соответствие каждому, а при выводе в консоль использовал бы метаданные (имя типа или назначенная ему человекочитаемая строка). А если бы набор TryGetX() был внешним и не поддавался переписыванию, сделал бы список хотя бы методов (TryGetBicycle, TryGetMotorcycle, TryGetCar).