当我将它转换为字符串时,为什么null合并运算符不能在我的可空int上运行?

时间:2014-05-27 08:53:06

标签: c# asp.net-mvc nullable null-coalescing

首先,我尝试使用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号码将会显示。

但如果我通过 MySite / Home / MyAction 路线运行没有任何Id的程序,则不会发生任何事情,MyContetnt将为空而我希望看到" Id没有价值"在屏幕上。

我错过了什么吗?

编辑:我很好奇是否可以使用??编写代码? (空合并运算符)?

2 个答案:

答案 0 :(得分:6)

转换失败时,

Convert.ToString()会导致空字符串。因此,空合并运算符不会检测到空但是空字符串

您应该使用:

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

答案 1 :(得分:2)

Convert.ToString(),当对int?采取行动时,会产生数字字符串(如果int?有值)或空字符串(否则)。

因此,它不会产生null,而是产生"""" ?? x == ""

相关问题