【问题标题】:C# PadLeft not workingC# PadLeft 不工作
【发布时间】:2018-07-02 15:42:50
【问题描述】:

我在从 SQL 中获取数字字符串并将其放入 excel 时遇到问题,但是 excel 格式化数字时没有前导零。

我编写的另一个程序读取 excel 并将其放入 pdf 中。正是在第二个程序中,我决定重新添加丢失的前导零。

我正在使用 .PadLeft 执行此操作,但遇到了一些错误。为了文档起见,我将把我发现的这个问题添加到 SO 并回答它。 这是我的问题:

我需要数字字符串为 10 位数字,前面的零最多为 10 位数字。

我有来自 excel 的 77776666 之类的数字,它们应该是 0077776666(10 位数字) 这是不起作用的。它没有附加任何零:

  string insuranceID = Convert.ToString(xlRange.Cells[i, 21].Value2 ?? "");
  insuranceID.PadLeft(10, '0');

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    为了让这段代码正常工作,我实际上不得不像这样编写代码:

    string insuranceID = Convert.ToString(xlRange.Cells[i, 21].Value2 ?? "");
    insuranceID = insuranceID.PadLeft(10, '0');
    

    它必须在 .PadLeft 位的前面有代码的赋值部分。

    我在 SO 上没有找到答案,只是发现了我的答案。我希望这可以帮助别人。

    【讨论】:

    • 这与string immutability有关
    • @NicholasSideras:更准确地说,这是因为字符串不变性 - PadLeft 创建了一个新字符串,而 OP 只是通过不分配它来丢弃它。 documentation 明确指出 “如果 PadLeft 方法用空白字符填充当前实例,则此方法不会修改当前实例的值。相反,它返回一个用前导 paddingChar 字符填充的新字符串,以便它的总长度是 totalWidth 个字符。”
    【解决方案2】:

    在 C# 中,字符串/字符串是不可变的,因此简单地声明 string.PadLeft(x, '0') 是行不通的。

    试试这个:

    string insuranceID = Convert.ToString(xlRange.Cells[i, 21].Value2 ?? "");   
    insuranceID = insuranceID.PadLeft(10, '0');
    

    为了将来节省您的时间,字符串的不变性也适用于许多字符串方法,例如string.Replace()string.ToUpper()string.ToLower() 等。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 2013-01-20
      相关资源
      最近更新 更多