c#中的子串帮助

Pra*_*ady 0 c#

我有字符串qty__c,可能有也可能没有小数点下面的代码给我一个System.ArgumentOutOfRangeException:长度不能小于零.

qty__c = qty__c.Substring(0, qty__c.IndexOf("."));
Run Code Online (Sandbox Code Playgroud)

如果没有".",我如何迎合?

谢谢

Jon*_*eet 6

最简单的方法是单独测试它:

int dotIndex = quantity.IndexOf('.');
if (dotIndex != -1)
{
    quantity = quantity.Substring(0, dotIndex);
}
Run Code Online (Sandbox Code Playgroud)

有一些替代方案......例如,如果您真的想在单个语句中执行此操作,则可以使用上面的条件运算符,或者:

quantity = quantity.Split('.')[0];
Run Code Online (Sandbox Code Playgroud)

或者更有效率:

// C# 4 version
quantity = quantity.Split(new[] {'.'}, 2)[0];

// Pre-C# 4 version
quantity = quantity.Split(new char[] {'.'}, 2)[0];
Run Code Online (Sandbox Code Playgroud)

(第二种形式在找到第一个点后有效地停止分裂.)

另一种选择是使用正则表达式.

总的来说,我认为第一种方法是最明智的.如果您发现需要经常这样做,请考虑编写一个方法来封装它:

// TODO: Think of a better name :)
public static string SubstringBeforeFirst(string text, string delimiter)
{
    int index = text.IndexOf(delimiter);
    return index == -1 ? text : text.Substring(0, index);
}
Run Code Online (Sandbox Code Playgroud)