诠释?c#,在ref中使用,究竟是什么

Asa*_*sad 1 c# integer

可能是一个小孩子,但是

我试图使用C Sharp将"输出"参数传递给存储过程,并且在我使用以下语法传递"output"变量之前出现错误:

int? ROWID = 0;
ADAPTER.INSERT(val1, val2, ref ROWID);
Run Code Online (Sandbox Code Playgroud)

虽然问题解决了,但我无法理解为什么,当我尝试将值保存在存储过程返回的正常"int"中时,它会产生转换错误

int result = ROWID; // not correct
Run Code Online (Sandbox Code Playgroud)

所以,我要做的是:

int result = (int)ROWID; // correct
Run Code Online (Sandbox Code Playgroud)

究竟是什么"int?" 意思?

jba*_*all 9

int?是一个可以为空的int.使用Nullable类型读取(C#编程指南).

顺便说一句,如果你没有阅读整个指南,至少要检查你的ROWID变量的HasValue和Value属性.


Mar*_*ers 7

诠释?与...相同Nullable<int>,表示该值可以是整数,也可以是null.

这可能是因为您的数据库列设置为NULL,而不是NOT NULL.如果数据库中实际上可以有空值,则代码将失败,并在转换中出现异常.如果数据库中不能有空值,那么您应该更改该列的模式定义而不是NOT NULL,以便它映射到int而不是int?.


Pau*_*sey 5

诠释?是一个可以为null的int(system.nullable),它可以接受null值.

转换的最佳方式是null coallesce:

int result = rowid ?? 0;
Run Code Online (Sandbox Code Playgroud)

  • "最好"?不总是.有时这样做是安全的,但有时候处理NULL和0会更好. (3认同)