Это плохая практика приводить общий T1 к объекту, а затем к T2? - PullRequest
1 голос
/ 06 марта 2012

У меня есть базовый метод в базовом классе, подобный следующему:

protected bool TryConvertTo<TIn, TOut>(TIn objIn, out TOut objOut)
    where TIn : MyObjectBase
    where TOut : MyObjectBase
{
    objOut = objIn is TOut ? (TOut) (object) objIn : default (TOut);
    return !ReferenceEquals(objOut, default (TOut));
}

Предположим, что я проверяю null везде, где это необходимо, и соответственно обрабатываю любые исключения приложения. Разве это плохая практика - «двойное приведение» объекта к объекту, а затем к TOut? Если это плохая практика, есть ли какие-то технические причины или просто отражение общей проблемы дизайна?

Я считаю, что использование целесообразно с учетом моего варианта использования, но поскольку я обычно не использую такое выражение, я подумал, что было бы безопасно узнать мнение сообщества.

1 Ответ

9 голосов
/ 06 марта 2012

Учитывая, что вы заставили их обоих наследовать от определенного класса (предполагая, что MyObjectBase действительно класс), почему бы просто не использовать:

protected bool TryConvertTo<TIn, TOut>(TIn objIn, out TOut objOut)
    where TIn : MyObjectBase
    where TOut : MyObjectBase
{
    objOut = objIn as TOut;
    return objOut != null;
}

(я предполагаю, что в MyObjectBase.

нет пользовательских операторов преобразования или == / != перегрузок).

С другой стороны, это довольно странная вещь, которую хочется сделать в первую очередь ... Вы уверены, что это подходящий дизайн, оставляя в стороне реализацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...