Почему оператор слияния 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 == ""
,