Я думаю, что общий интерфейс между этими двумя объектами будет хорошей идеей.
Возможно, определите необычные поля как nullable и проверите проверку экрана на нуль и определите, как отображать эти поля.
int? OrderNumber {get;set;}
DateTime? QuoteDate {get;set;}
EDIT: В ответ на комментарий JC в
Возможно рассмотреть попытку взять его на шаг дальше и, по крайней мере, логически, рассмотрим порядок и Quote быть такой же объект, но на разных этапах в «Жизненный цикл заказа». То есть «Цитата» - это заказ в начале жизненного цикла, тогда как «Заказ» - это заказ в середине или конце жизненного цикла.
У вас может быть свойство OrderState, определенное на вашем интерфейсе, и тогда ваш пользовательский интерфейс может использовать свойство OrderState, чтобы решить, как должен отображаться котировка/порядок, а не проверять каждую часть данных отдельно.
Если вы считаете, что проблема в том, что у вас слишком много утверждений в вашем пользовательском интерфейсе, то, возможно, подумайте о создании небольших пользовательских элементов управления, чтобы обрабатывать отображение кусков пользовательского интерфейса для цитаты или для заказа. Затем вы можете динамически добавить соответствующий элемент управления (элемент управления цитатой или контроль заказа) в пользовательский интерфейс или добавить оба элемента управления и просто показать/скрыть их соответствующим образом. Я бы предупредил, однако, что это звучит так, будто это может быть грязный подход, поэтому будьте осторожны, чтобы решение не оказалось более сложным, чем проблема, которую вы пытаетесь решить.
Я думаю, что это приводит к тому же коду, который я опубликовал, поскольку вам нужно будет проверить конкретный тип IOrder. Поэтому я не думаю, что создание полей с нулевыми значениями принесет все. –