Почему оператор слияния null не работает на моем обнуляемом int, когда я преобразую его в строку?

Сначала я попытался написать If-Then-Else statement используя ternary operator,
Это работает нормально, просто из любопытства я решил написать тот же код, используя
null-coalescing operator но это не работает, как ожидалось.

public System.Web.Mvc.ActionResult MyAction(int? Id)
{
    string MyContetnt = string.Empty;

    //This line of code works perfectly
    //MyContent = Id.HasValue ? Id.Value.ToString() : "Id has no value";

    //This line of code dosent show "Id has no value" at all 
    MyContetnt = (System.Convert.ToString(Id) ?? "Id has no value").ToString();

    return Content(MyContetnt);
}

Если я запускаю программу по маршруту Mysite/Home/MyAction/8777, то все идеально и вводится Id номер будет показан.

Но если я запускаю программу без каких-либо Id через маршрут MySite/Home/MyAction ничего не произойдет и MyContetnt будет пустым, в то время как я ожидаю увидеть " Идентификатор не имеет значения " на экране.

Я что-то пропустил?

Редактировать: мне любопытно, можно ли написать код с помощью?? (нулевой оператор объединения)?

2 ответа

Решение

Convert.ToString() приводит к пустой строке, когда преобразование не удалось. Таким образом, оператор объединения нулей не обнаружит пустую строку, а пустую

Вы должны использовать:

MyContetnt = Id.HasValue ? System.Convert.ToString(Id.Value) : "Id has no value";

Convert.ToString()когда действует на int? будет производить либо числовую строку (если int? имеет значение) или пустую строку (в противном случае).

Поэтому он не производит nullпроизводит "", а также "" ?? x == "",

Другие вопросы по тегам