3

我现在正在使用这样的部分字符串:

something.Substring(0, something.Length >= 8 ? 8 : something.Length)

这种额外混乱的唯一原因是因为有时长度小于我在方法参数中输入的长度,这会导致错误。

有没有更简单的方法来安全地裁剪文本?

4

5 回答 5

16

这里真的不需要丑陋的三元表达式。

return something.Substring(0, Math.Min(length, something.Length));
于 2012-06-02T19:13:04.787 回答
7

编写一个扩展方法string来隐藏“混乱”。

public static string SafeSubstring(this string orig, int length)
{
  return orig.Substring(0, orig.Length >= length ? length : orig.Length);
}

something.SafeSubstring(8);
于 2012-06-02T18:33:19.033 回答
3

Visual Basic 实现 Right() 和 Left() 字符串函数。不妨偷他们,他们已经过很好的测试:

public static class Extensions {
    public static string Right(this string str, int Length) {
        if (Length < 0) throw new ArgumentOutOfRangeException("Length");
        if (Length == 0 || str == null) return string.Empty;
        int len = str.Length;
        if (Length >= len) return str;
        else return str.Substring(len - Length, Length);
    }
    public static string Left(this string str, int Length)
    {
        if (Length < 0) throw new ArgumentOutOfRangeException("Length");
        if (Length == 0 || str == null) return string.Empty;
        int len = str.Length;
        if (Length >= len) return str;
        else return str.Substring(0, Length);
    }
}
于 2012-06-02T18:47:49.353 回答
0

这不是最有效的方法,我会使用 Oded 的解决方案,但这也是实现您正在寻找的方法的一种方法:

new string(something.Take(8).ToArray());
于 2012-06-02T19:04:30.437 回答
0

Hans Passant 的回答启发,这里有一种更直接的“窃取”Visual Basic 实现的方法。(此方法需要添加对 Microsoft.VisualBasic.dll 的引用

public static class Extensions
{
    public static string Right(this string str, int Length) =>
        Microsoft.VisualBasic.Strings.Right(str, Length);

    public static string Left(this string str, int Length) =>
        Microsoft.VisualBasic.Strings.Left(str, Length);
}
于 2017-09-15T13:29:41.130 回答