Является ли приведение к обнуляемому типу плохой идеей? - PullRequest
0 голосов
/ 01 апреля 2012

Я всегда придерживался идеи, что кастинга следует избегать любой ценой.Конечно, бывают случаи, когда у вас нет реального выбора (особенно когда вам нужно привести между типами интерфейсов, когда поддерживается несколько интерфейсов).обнуляемый тип для обнуляемого типа.Например:

public int? GetFooBar(someCriteria) {
    // Code to get a Foo
    return foo == null ? null : (int?)foo.Bar; // Bar is a non-null int
}

Они выбрали здесь мой единственный выбор?Какие еще варианты у меня могут быть?

Полагаю, я мог бы просто сгенерировать исключение, но я не люблю засорять свой код обработчиками исключений, которые не нужны.Кроме того, не обнаружение foo может быть ожидаемым явлением и не считается «исключительным».

Ответы [ 2 ]

4 голосов
/ 01 апреля 2012

Вы всегда можете:

if(foo == null)
    return null;

return foo.Bar;

Не требуется кастинг и немного яснее, за счет краткости.

0 голосов
/ 02 июня 2012

Позвольте мне отметить, что

return foo == null ? null : (int?)foo.Bar;

компилируется с теми же кодами операций, что и

return foo == null ? new Nullable<int>() : new Nullable<int>(foo.Bar);

Версия с оператором if может также компилироваться с теми же кодами операций, так что это действительнопросто вопрос личного вкуса.Как насчет этой версии:

return foo == null ? (int?)null : foo.Bar;

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

...