2012-06-02 92 views
2

我現在考慮字符串的部分是這樣的:簡單的方法來避免超過字符串邊界的子字符串?

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

的額外混亂的唯一原因是因爲有時長度比我放在方法參數小,這會導致錯誤。

是否有更簡單的方法來安全地剪裁文本

+0

AFAIK不是在框架,但它應該是微不足道自己寫出這樣的方法。 – svick

回答

7

string上寫一個擴展方法,將「混亂」隱藏起來。

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

something.SafeSubstring(8); 
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); 
    } 
} 
+0

OP的問題似乎需要相當於Left(),而不是Right()。編輯這個答案來包含Left() –

0

這不是做到這一點的最有效的方式,我將與俄德的解決方案去,但是這也是一個方式來實現你」尋找:

new string(something.Take(8).ToArray()); 
8

這裏真的不需要醜陋的三元表達。

return something.Substring(0, Math.Min(length, something.Length)); 
0

Hans Passant's answer的啓發,這裏有一個更直接的方式來「竊取」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); 
} 
相關問題