Ошибка визуальной студии в правильном выражении - PullRequest
1 голос
/ 10 сентября 2011

Почему Visual Studio выдает ошибку:

public void afunction(int? bar){ somecode }

afunction(String.IsNullOrEmpty(Request["foo"])?null:int.Parse(Request["foo"]));

это не дает мне никакого неявного преобразования между null и int

Ответы [ 3 ]

4 голосов
/ 10 сентября 2011

2-й и 3-й операнды для? Оператор должен иметь совместимые типы. Они не в вашем случае, 2-й является нулевым, 3-й является int. Не существует неявного преобразования из int в null или из null в int. Только явные, такие как приведение к объекту или Nullable<int>. Вы можете рассмотреть возможность использования этого:

afunction(String.IsNullOrEmpty(Request["foo"]) ? default(int?) : int.Parse(Request["foo"]));

Здесь нет проблем, поскольку является неявным преобразованием из int в int?

1 голос
/ 10 сентября 2011

Упрощенная версия:

  int? x = true ? null : 1;

Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между <null> и 'int'

Таким образом, условный оператор не работает так, как вы ожидаете (в отношении преобразования типов).
Рефакторинг в любом случае не повредит, просто разделите его на что-нибудь читабельное.

1 голос
/ 10 сентября 2011

Вам нужно будет немного изменить свой подход, например:

? null : new Nullable<int>(int.Parse(Request["foo"]));

Компилятор выражает вашу ответственность за преобразование типов.

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