【问题标题】:C# Substring() bug in .NET v4.5? [closed].NET v4.5 中的 C# Substring() 错误? [关闭]
【发布时间】:2013-06-14 15:21:55
【问题描述】:

我有点疑惑为什么 Substring() 函数不能正常工作。它只是不会切断字符串末尾的逗号。

参见下面的示例代码...

public static string OrderByClauseBuilder(string parmSortByColumn)
{
    if (parmSortByColumn.LastIndexOf(",") > -1) { 
        parmSortByColumn.Substring(0, parmSortByColumn.LastIndexOf(","));
    }
    return parmSortByColumn;
}
protected void Page_Load(object sender, EventArgs e)
{
    string sqlAsk = "";
    string value = "stocknumber asc,";

    sqlAsk = OrderByClauseBuilder(value);
}

【问题讨论】:

  • 您可以从修复 LastIndex(到 LastIndexOf)开始。
  • 糟糕.. 发布问题时输入错误。
  • @fletchsod,请咨询the docs 了解此类明显问题。 (在那里的注释中,“此方法不会修改当前实例的值。相反,它返回一个新字符串,其长度字符从当前字符串中的 startIndex 位置开始。”)
  • @fletchsod - 我是这么认为的,但你不应该在这里输入代码。复制/粘贴通过编译器的东西要好得多。
  • @HenkHolterman - 问题是这台 Internet 计算机在单独的网络上。所以,对我来说,打字比复制更容易,把它放在软盘上(哦,别再用软盘了)然后做sneakernet然后粘贴。哦,好吧!

标签: c# .net .net-4.5 asp.net-4.5


【解决方案1】:

字符串在 .NET 中是不可变的,字符串的每个方法都返回一个新的、修改后的方法。因此你必须做一些调整:

public static string OrderByClauseBuilder(string parmSortByColumn)
{
    if (parmSortByColumn.LastIndexOf(",") > -1) { 
        parmSortByColumn = parmSortByColumn.Substring(0, parmSortByColumn.LastIndexOf(","));
    }
    return parmSortByColumn;
}

【讨论】:

  • +1。通常使用return parmSortByColumn.TrimEnd(',');,IMO 会更容易。 :)
  • @Trustme-I'maDoctor,完全同意。问题是关于子字符串的。
  • 我知道,我知道,只是指出来,也许OP会改变主意。
  • @Trustme-I'maDoctor,实际上这两种方法是不同的。如果最后一个逗号不是字符串的最后一个字符,Trim 将不会做任何事情。它会在 OP 发布的情况下起作用,但一般来说它们会做不同的事情。
  • 天啊!我没看到。你是对的!!这是因为没有为 parmSortByColumn 分配 parmSortByColumn 的副本。 我的手掌拍着我的头
猜你喜欢
  • 2017-09-14
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多