2

起初我尝试If-Then-Else statement使用ternary operator.
然后它工作正常只是出于好奇,我决定使用 a 编写相同的代码,
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将为空,而我希望在屏幕上看到“ Id has no value ”。

我错过了什么吗?

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

4

2 回答 2

6

Convert.ToString()转换失败时产生空字符串。因此空值合并运算符不会检测到空值而是空字符串

你应该使用:

MyContetnt = Id.HasValue ? System.Convert.ToString(Id.Value) : "Id has no value";
于 2014-05-27T08:55:37.363 回答
2

Convert.ToString(), 作用于 an 时int?将产生一个数字字符串(如果int?有值)或空字符串(否则)。

因此,它不是在生产null,而是在生产"",并且"" ?? x == ""

于 2014-05-27T08:56:26.943 回答