如果长度大于String的长度,则子串不按预期工作

好的,我知道如果/其他工作,我需要一个替代方案。

我在用

B = String.Concat(A.Substring(0, 40)); 

捕获值的前40个字符。

如果A处的值大于40 ,则B能够捕获,但如果A的值小于40 ,则在B处没有捕获值。

不理解在String.Concat中只传递单个字符串的目的。 您的目的可通过以下方式解决:

 if(A.Length > 40) B= A.Substring(0,40); else B=A; 

快而脏:

  A.Length > 40 ? A.Substring(0, 40) : A 

为什么不为它创建一个扩展…称它为Truncate或Left,或者其他什么。

 public static class MyExtensions { public static string Truncate(this string s, int length) { if(s.Length > length) return s.Substring(0, length); return s; } } 

然后你可以这样简单地调用它:

 string B = A.Truncate(40); 

另请注意,您不必将其作为扩展方法,尽管它会更清晰。

在StringTool类中:

  public static string Truncate(string value, int length) { if(value.Length > length) return value.Substring(0, length); return value; } 

并称之为:

 string B = StringTool.Truncate(A, 40); 

使用下面的代码来子串

 B = String.padright(40).Substring(0, 40)) 

扩展最适合像这样的问题;)我有一些脏名但每个人都知道它会做什么 – 这是exception安全的子串:

 public static string SubstringNoLongerThanSource(this string source, int startIndex, int maxLength) { return source.Substring(startIndex, Math.Min(source.Length - startIndex, maxLength)); } 

您可以使用Microsoft.VisualBasic.Strings Left 。

 B = Microsoft.VisualBasic.Strings.Left(A, 40); 

无论如何,不​​知道你为什么要使用Concat

 B = string.Concat(A.Substring(0, Math.Min(40, A.Length)));