c#中Int的值是否为Null与0相同?
我知道Int是一个不可为空的值,但在MVC中,我们使用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的快捷方式)可以使用
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
有(至少)两种可能性:
不管是什么情况,没有任何东西可以将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.
}