【问题标题】:Increment a string value增加一个字符串值
【发布时间】:2018-04-20 09:22:21
【问题描述】:

如何增加字符串值?例如:

string RECONCILIATION_COUNT;
if (thing happens) {
    RECONCILIATION_COUNT++;
}

这通常是行不通的,因为不可能以与 int 值相同的方式递增字符串变量。

RECONCILIATION_COUNT 始终是 0-5 之间的数字。

我选择将其声明为字符串,因为我从数据库中获取此值,但我没有找到如何从 sql 中获取 int 值的方法。

RECONCILIATION_COUNT = Rows["RECONCILIATION_COUNT"].toString();

这是我目前正在使用的。

【问题讨论】:

  • RECONCILIATION_COUNT = (int.Parse(RECONCILIATION_COUNT) + 1).ToString();
  • 所以听起来您宁愿知道如何将 db 值解析为int,也不愿将其保留为字符串并尝试对该字符串执行int 操作?尝试Convert.ToInt32(Rows["RECONCILIATION_COUNT"]); 仅仅因为你不知道如何解析而使用糟糕的类型设计是一个坏主意。
  • 首先不要将数值作为字符串存储在数据库中,其次,不要用大写字母命名变量,我的强迫症开始了。第三,看第一点

标签: c# .net variables


【解决方案1】:

将一个 count 作为String 是很奇怪的:int 是迄今为止很自然的选择。从技术上讲,你可以把它写成

if (thing happens)
  RECONCILIATION_COUNT = (int.Parse(RECONCILIATION_COUNT) + 1).ToString();

更好的实现是使用int:

int RECONCILIATION_COUNT;

...

if (thing happens)
  RECONCILIATION_COUNT++;

...

RECONCILIATION_COUNT = Convert.ToInt32(Rows["RECONCILIATION_COUNT"]);

【讨论】:

  • 使用 RECONCILIATION_COUNT = Convert.ToInt32(Rows["RECONCILIATION_COUNT"]);给我这种错误“列'RECONCILIATION COUNT'不属于表”,而实际上该列确实存在于表中
  • 请检查确切的列名。
  • 我将表中的列名复制粘贴到我的代码中的任何位置,所以我认为这不是拼写错误。这是我用来首先选择 query = "SELECT ID, REF_NO, CARD_DEBIT_OR_CREDIT" 的查询;查询 += " FROM " + clsUtility.GetMasterTable() + " ";查询 += " WHERE FLOW_STATUS_IS_CURRENT = 1 ";查询 += " AND RECONCILIATION_STATUS = 0";查询 += " AND RECONCILIATION_COUNT
  • 我在 SELECT 中没有看到任何 RECONCILIATION_COUNT。看来您应该将该字段添加到 SELECT
【解决方案2】:

如果您希望将值作为字符串从数据库中获取,则可以稍后将其解析为“int”:

使用Int32.Parse 方法:

 int number = Int32.Parse(RECONCILIATION_COUNT);

或者Int32.TryParse 方法:

     int number;

     bool result = Int32.TryParse(RECONCILIATION_COUNT, out number);
     if (result)
     {
        // do your increment     
     } 

【讨论】:

    【解决方案3】:
    RECONCILIATION_COUNT = "" + (int32.Parse(RECONCILIATION_COUNT) + 1);
    

    但如果变量始终是数字,我宁愿将 RECONCILIATION_COUNT 声明为 int,并在从数据库上传文本时将其解析为数字。

    【讨论】:

      【解决方案4】:

      我认为你在这里的做法有点奇怪。您正在 SQL 中的数据类型和您的代码之间创建紧密耦合,并且由于数据库限制,您正在积累技术债务(解决方法)。

      我建议您在存储库中执行从字符串到 int 和向后的转换(当您想在数据库中写入该值时)。

      关于使用 int.parse (或类似的)的所有答案都是有效的,但请仔细考虑一下如果您执行以下操作会发生什么:

      reconciliation_count = int.parse(reconciliation_count)++.ToString();
      

      分解: - int.parse - 为您递增的新变量分配内存 - ToString - 为重新分配给变量的新字符串分配内存

      有很多内存在上下浮动,您需要依靠 GC 为您清理所有内容,不要忘记字符串是不可变的。

      但是,如果您遵循我的方法,您可以只分配一个 int 变量 ONCE 并用它做任何您想做的事情,然后当您将它保存到数据库中时,工作就完成了。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-17
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        • 2021-02-14
        • 1970-01-01
        相关资源
        最近更新 更多