У меня есть метод, который принимает в качестве параметра обнуляемое int:

myMethod(int? parameter) {
//body
}

И в методе, который вызывает этот метод, параметр, который я передаю, очевидно, может быть либо нулем, либо int (но сначала это строка). Я пытаюсь сделать следующее:

myMethod(
    !string.IsNullOrEmpty(someString)?
    Convert.ToInt32(someString) : null
);

Однако я получаю сообщение об ошибке:

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

c#
-1
duxfox-- 9 Мар 2015 в 22:02

2 ответа

Лучший ответ

Вам нужно бросить одну сторону на int?

 !string.IsNullOrEmpty(someString)
  ? Convert.ToInt32(someString)   
  : (int?)null
4
Selman Genç 9 Мар 2015 в 19:03

Вам нужно, чтобы значение условного оператора, которое вы используете для вычисления, было int?, но ни второй, ни их операнды не относятся к типу int? . Оба они неявно преобразуются в int?, но когда C # необходимо определить тип выражения, учитывая варианты A и B в качестве параметров, он всегда будет выбирать A или B , а не тип C, который имеет неявные преобразования из A и B.

Что касается того, что делать, просто приведите один из двух последних операндов к типу int?. (Неважно какой.)

3
Servy 9 Мар 2015 в 19:04