c#中的Int是否与0相同?

时间:2013-07-10 13:23:01

标签: c# asp.net-mvc

我理解Int是一个不可为空的值,但在MVC中我们使用

的情况
public ActionResult Myfunction(int modelattr)
{
    if (modelattr != 0) // how is null handled as 0?
    {
        // do some code
    }
}

如何将Null处理为0?

5 个答案:

答案 0 :(得分:9)

int不能是null。期。许多系统使用0作为“默认”值并在这种情况下应用特殊逻辑,但它不能为空。

int?Nullable<int>的快捷方式)CAN bu null,但您的示例不使用该内容。

答案 1 :(得分:3)

结构不能为空且int is a structintSystem.Int32 BTW的别名。

如果您想知道如果您没有为该值指定任何内容,那么“默认”值将是什么(例如,您有int作为您从未设置的类的属性),您可以得到default(int)的价值。

如果确实需要结构为空值,则可以使用Nullable包装器。通常这可以缩短为int?

答案 2 :(得分:3)

所以你真正要问的是,鉴于这条路线:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

如果没有指定,控制器如何传递id值0。

有(至少)两种可能性:

  1. 有一些代码会检查缺少的id值并提供0.例如,控制器的默认方法可以执行此操作。
  2. 还有另一条提供默认路线。
  3. 无论如何,没有任何东西可以将null转换为0.在没有指定id的情况下,某处的代码会提供默认值。

答案 3 :(得分:1)

上面的答案为您提供了有关int不能为空的原因以及如何创建可空int的充分信息。但是,要解决您正在研究的问题(没有将ID传递给某个操作),您需要具备以下条件:

在路线配置中(注意可选的ID参数):

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

然后调整控制器操作签名以匹配以下内容以及空值测试:

public ActionResult Myfunction(int? modelattr)
{
    if (modelattr.HasValue()) //this will test if the nullable int has a value or is null
    {
        // do some code
    }
}

最后,您可能希望反转if语句以减少代码执行块的嵌套,具体取决于参数为null时您要执行的操作。例如:

public ActionResult Myfunction(int? modelattr)
{
    if (!modelattr.HasValue()) //this will test if the nullable int has a value or is null
    {
        //throw an exception or return a route to another page
    }
    //now do your processing, no need to have to stay inside of the if statement.
}

答案 4 :(得分:0)

int永远不会为null,因为它是不可为空的值类型。如果需要,请尝试按如下方式为int分配空值

        int i = null;

它会给你错误     无法将null转换为'int',因为它是一个不可为空的值类型