【问题标题】:int? c#, used in ref, what exactly is it诠释? c#,用在ref里,到底是什么
【发布时间】:2009-12-04 23:28:33
【问题描述】:

可能是个小问题,但是

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

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

虽然问题解决了,但我只是不明白为什么,当我尝试将值保存在存储过程返回的正常“int”中时,它会给出转换错误

int result = ROWID; // not correct

所以,我要做的是:

int result = (int)ROWID; // correct

“int”到底是什么?什么意思?

【问题讨论】:

    标签: c# integer


    【解决方案1】:

    int? 是一个可为空的 int。阅读Using Nullable Types (C# Programming Guide)

    顺便说一句,如果您没有阅读完整的指南,请至少检查一下您的 ROWID 变量的 HasValue 和 Value 属性。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,马克。如果在使用 SCOPE_IDENTITY() 插入新行后选择了自动生成的主键行,我试图返回的值是“ID”。正如您所理解的那样,列未设置为接受 null,它是主键。但是如果操作不成功,结果可能为空??
      • 主键通常不应为空。通常,如果插入失败,您将得到一个异常,而不是 null,尽管这当然取决于您使用的 API。
      • 它不能为空,但是从存储过程返回的结果可以。
      • 那么要么是存储过程中的错误,您应该修复它,或者可能存储的预编码返回 null 以告诉您发生了错误,您应该首先检查 null 并处理它在您尝试进行演员表之前出错。如果你不这样做,当你尝试强制转换为 int 时,你会得到一个异常。
      • 对我之前的帖子的一个小修正——我希望之前的意思很清楚,但只是为了澄清一下:如果你不这样做,并且存储过程返回 null ,当您尝试强制转换为 int 时会出现异常。
      【解决方案3】:

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

      最好的转换方法是空合并:

      int result = rowid ?? 0;
      

      【讨论】:

      • “最佳”?不总是。有时这样做是安全的,但有时最好以不同方式处理 NULL 和 0。
      • 我认为它是最好的,但通常收集到诸如 -1 或 int.max 之类的值会更好,但它仍然是相同的解决方案。
      【解决方案4】:

      int? 是一个可以为空的整数。有关详细信息,请参阅 Nullable Types 上的 MSDN 页面。

      【讨论】:

        【解决方案5】:

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

        在此处阅读有关它们的更多信息:

        Nullable Types

        【讨论】:

          【解决方案6】:

          我建议这样做:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-19
            • 1970-01-01
            • 2011-01-18
            • 2019-04-22
            • 1970-01-01
            • 1970-01-01
            • 2012-05-27
            • 2014-05-06
            相关资源
            最近更新 更多