可能是一个小孩子,但是
我试图使用C Sharp将“输出”参数传递给存储过程,并且在我使用以下语法传递“output”变量之前出现错误:
int? ROWID = 0;
ADAPTER.INSERT(val1, val2, ref ROWID);
虽然问题已经解决,但我无法理解为什么,当我尝试将值保存在存储过程返回的正常“int”中时,它会产生转换错误
int result = ROWID; // not correct
所以,我要做的是:
int result = (int)ROWID; // correct
究竟是什么“int?”意思?
答案 0 :(得分:9)
int?
是一个可以为空的int。阅读Using Nullable Types (C# Programming Guide)。
顺便说一句,如果你没有阅读整个指南,至少要检查你的ROWID变量的HasValue和Value属性。
答案 1 :(得分:7)
INT?与Nullable<int>
相同,表示该值可以是整数,也可以是null。
这可能是因为您的数据库列设置为NULL,而不是NOT NULL。如果数据库中实际上可以有空值,则代码将失败,并在转换中出现异常。如果数据库中不能有空值,那么您应该更改该列的模式定义而不是NOT NULL,以便它映射到int而不是int?。
答案 2 :(得分:5)
INT?是一个可以为null的int(system.nullable),它可以接受值null。
转换的最佳方式是null coallesce:
int result = rowid ?? 0;
答案 3 :(得分:2)
int?
是一个可以为空的整数。有关详细信息,请参阅Nullable Types上的MSDN页面。
答案 4 :(得分:1)
答案 5 :(得分:0)
我会建议:
int? ROWID = 0;
........
int result = ROWID.HasValue ? ROWID.Value : 0;