Подстрока не работает, как ожидалось, если длина больше длины строки

Хорошо, ребята, я знаю, работает ли /else, мне нужна была альтернатива.

Я использую

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

для захвата первых 40 символов значения.

Если значение в A больше, чем 40, B может захватывать, но если значение A меньше 40, то значение B.

Ответ 1

String.Concat не служит вашей цели здесь. Вы должны сделать следующее:

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

Ответ 2

Быстрая и грязная:

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

Ответ 3

Почему бы не создать расширение для него... назовите его 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);

Ответ 4

Расширения лучше всего подходят для таких проблем;) У меня есть грязное имя, но все знают, что он будет делать - это исключая безопасную подстроку:

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

Ответ 5

используйте ниже код для подстроки

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

Ответ 6

Вы можете использовать Left от Microsoft.VisualBasic.Strings.

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

Не знаю, почему вы хотите использовать Concat, в любом случае.

Ответ 7

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