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

时间:2009-12-04 23:28:34

标签: c# integer

可能是一个小孩子,但是

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

int? ROWID = 0;
ADAPTER.INSERT(val1, val2, ref ROWID);

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

int result = ROWID; // not correct

所以,我要做的是:

int result = (int)ROWID; // correct

究竟是什么“int?”意思?

6 个答案:

答案 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)

这是一个可以为空的类型。

在这里阅读更多相关信息:

Nullable Types

答案 5 :(得分:0)

我会建议:

        int? ROWID = 0;
        ........
        int result = ROWID.HasValue ? ROWID.Value : 0;