在C#中将int赋值给null时会发生什么?和良好做法

在C#中将int赋值给null时会发生什么?和良好做法,c#,asp.net,webforms,asp.net-4.5,C#,Asp.net,Webforms,Asp.net 4.5,我正在开发asp.net web forms 4.5 由于我使用的是代码优先实体框架,因此模型的代码由该框架生成。它们中的大多数都可以为null(我想它们是默认值) 所以每当我想用整数值操作时,VisualStudio都会给我一个错误,说这是一个可为null的类型。 我很确定这是整数,有一个值,大约99%的时间, 但我不知道如果一个null进入会发生什么 像这样的 int idx = (int) item.index; 最好的情况是0, 最糟糕的情况是显示错误,甚至不呈现页面 另一件事,这是一

我正在开发asp.net web forms 4.5

由于我使用的是代码优先实体框架,因此模型的代码由该框架生成。它们中的大多数都可以为null(我想它们是默认值)

所以每当我想用整数值操作时,VisualStudio都会给我一个错误,说这是一个可为null的类型。 我很确定这是整数,有一个值,大约99%的时间, 但我不知道如果一个null进入会发生什么

像这样的

int idx = (int) item.index;
最好的情况是0, 最糟糕的情况是显示错误,甚至不呈现页面

另一件事,这是一个好方法吗,或者。。这是坏习惯吗? 我不想将数据库设置为非null。。因为有时候它可能是空的

我想我可以这样做

if (item.skuIdx == null) idx = 0;
else idx = item.skuIdx
但是,再一次,我觉得编码一些根本不会发生的事情很愚蠢。
所以你们对此怎么看?

你们只需要使用一个可为空的类型作为变量

int? idx = item.index;
如果要转换为非Null,可以编辑:NOT。 这已被社区纠正为错误。把它留在这里,这样评论就不会显得不合适了

int idx;
Int32.TryParse(item.index.ToString(), out idx);

使用以下命令:
intidx=item.index??0;这是合并运算符的最佳情况。如果为null,您将得到一个异常,但您可以自己尝试一下。相反,请执行
item.Index.GetValueOrDefault()
如果您知道这是“甚至不会发生的事情”,那么我不明白为什么需要将skuIdx(以及相应的数据库列)设为null。但是假设你不是真的这么想,它可以是空的,那么你需要决定,如果你碰巧从数据库中读取了空值,那么明智的行为是什么(如果你的应用程序存在足够长的时间,不管你现在有什么代码,我可以保证迟早会发生)。@Gusman-Wow这令人震惊。我不知道。Thank.Int32.TryParse不会那样工作,不管怎样,它在逻辑上等同于idx=idem.index??0.我将答案调整为cast item.index to string,因为。。。向下投票。更糟糕的是,如果该值为null,那么ToString将抛出一个异常…我明白了,通过.Net fiddle进行了一些测试以确认。对不起,伙计们,只是有点生锈了。我使用了一些简单的扩展方法来做这类事情,所以我不必想太多,谢谢你纠正我!