检查字符串长度后不使用If或Try Catch的子串字符串

时间:2012-03-13 21:51:32

标签: c# .net linq-to-objects

只是好奇我是否可以在String.Length大于或等于20而不使用IfTry catch的情况下对字符串进行子串?

谢谢!

6 个答案:

答案 0 :(得分:17)

嗯,你有什么尝试?请事先检查一下:

if(input.Length >= 20)
{
   input = input.Substring(0,20);
}

如果你真的不想使用if语句,你可以使用Linq,它只是模糊了解决方案,在这种情况下效率较低:

input = new string(input.Take(20).ToArray());

技术上这也不使用if语句:

input = input.Length >= 20 ? input.Substring(0,20) : input;

答案 1 :(得分:11)

使用字符串扩展名。它仍然使用IF,但是,它使您的代码在使用时更清晰。

    public static string Left(this string input, int length)
    {
        string result = input;
        if (input != null && input.Length > length)
        {
            result = input.Substring(0, length);
        }
        return result;
    }

用法:

input = input.Left(20);

答案 2 :(得分:5)

someString = someString.Substring(0,Math.Min(20,someString.Length));

答案 3 :(得分:2)

只是不在乎......

a.SubString(Math.Min(startPos, a.Length), Math.Min(a.Length - Math.Min(startPos, a.Length),  
            requestedLen - Math.Min(startPos, a.Length);
哦,天啊,我的大脑燃烧,有时间打麻袋......

答案 4 :(得分:1)

这确实需要澄清,因为如果它小于20,你没有说明你想要发生什么。返回原始字符串或返回null?

无论如何,如果你不想要if块,你可以使用三元运算符:

(someString.Length < 20) ? someString : someString.SubString(...

答案 5 :(得分:0)

如果确保子字符串范围在原始字符串范围内,则不需要try-catch。当然,你不能得到一个比原来更长的子串。