Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#中Int的值是否为Null与0相同?_C#_Asp.net Mvc - Fatal编程技术网

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

c#中Int的值是否为Null与0相同?,c#,asp.net-mvc,C#,Asp.net Mvc,我知道Int是一个不可为空的值,但在MVC中,我们使用 public ActionResult Myfunction(int modelattr) { if (modelattr != 0) // how is null handled as 0? { // do some code } } 空值如何处理为0?一个int不能是Null。时期许多系统使用0作为“默认”值,并在这种情况下应用特殊逻辑,但不能为空 int?(Nullable的快捷方式)可以使用

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

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

空值如何处理为0?

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


int?
Nullable
的快捷方式)可以使用
null
,但您的示例不使用该选项。

int从不包含null,因为它是不可为null的值类型。如果需要,请尝试按如下方式为int赋值

        int i = null;
它将给您错误信息,如

无法将null转换为“int”,因为它是不可为null的值类型

结构不能为null并且(
int
System.Int32
BTW的别名)

如果您想知道如果您没有为该值赋值(例如,您将
int
作为从未设置过的类的属性),那么“默认”值是什么,您可以获得
default(int)
的值


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

,因此,考虑到以下路线,您真正要问的是:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
那么,如果未指定值,控制器如何传递
id
值0

有(至少)两种可能性:

  • 有一些代码检查缺少的id值并提供0。例如,控制器的默认方法可以做到这一点
  • 还有另一个路由提供默认路由

  • 不管是什么情况,没有任何东西可以将null转换为0。当未指定id时,某些代码会提供默认值。

    上述答案为您提供了大量信息,说明int不能为null的原因以及如何创建可为null的int。但是,为了解决您正在研究的问题(没有将id传递给操作),您需要具备以下条件:

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

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

    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.
    }
    

    Null不能用int类型表示。0是int类型的默认值。有int吗?或可以处理nullnull的Nullable!=0, 0 != 无效的null==null。你在问什么
    modelattr
    是一个int。为什么您认为它是null?将0看作
    null
    是一件非常简单的事情。在C#中,
    null
    是它自己的东西,与0不同。@JimMischel在MVC中导航到actionresult
    /controller/action/int
    时。但是,当您搜索示例时,您会发现如果用户输入
    /controller/action
    ,则没有空处理(未分配)过程。可能值得添加的是
    int?
    可以为空。
    int?
    语法是
    Nullable
    的快捷方式。因此,并不是说不能有一个“可为null的int”。只是
    int
    本身永远不能为
    null
    。并且在您的示例模型中attr是一个int。所以您永远不能传递int?你的功能。现在来了大量重复的答案--
    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.
    }