我知道 Int 是一个不可为空的值,但是在 MVC 中我们使用了某些情况
public ActionResult Myfunction(int modelattr)
{
if (modelattr != 0) // how is null handled as 0?
{
// do some code
}
}
Null如何处理为0?
我知道 Int 是一个不可为空的值,但是在 MVC 中我们使用了某些情况
public ActionResult Myfunction(int modelattr)
{
if (modelattr != 0) // how is null handled as 0?
{
// do some code
}
}
Null如何处理为0?
一个int
不可能null
。时期。许多系统将0
其用作“默认”值并在这种情况下应用特殊逻辑,但它不能为空。
CAN bu的int?
(快捷方式),但您的示例没有使用它。Nullable<int>
null
所以你真正要问的是,鉴于这条路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
那么,id
如果没有指定,控制器如何传递 0 值。
有(至少)两种可能性:
无论如何,没有任何东西可以将 null 转换为 0。当未指定 id 时,某处的代码会提供默认值。
上面的答案为您提供了有关 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.
}
int 永远不会持有 null,因为它是不可为空的值类型。如果您愿意,请尝试为 int 分配一个空值,如下所示
int i = null;
它会给你错误,
因为它不能将 null 转换为 'int',因为它是不可为空的值类型