Ищете простой способ усечения строки в c#

#c#

#c#

Вопрос:

Я использовал следующее:

 t.Description.Substring(0, 20)
 

Но возникает проблема, если в строке меньше 20 символов. Есть ли простой способ (однострочная функция), который я мог бы использовать для усечения до максимума без получения ошибок, когда строка меньше 20 символов?

Ответ №1:

Как насчет:

 t.Description.Substring(0, Math.Min(0, t.Description.Length));
 

Несколько некрасиво, но сработает. В качестве альтернативы, напишите метод расширения:

 public static string SafeSubstring(this string text, int maxLength)
{
    // TODO: Argument validation

    // If we're asked for more than we've got, we can just return the
    // original reference
    return text.Length > maxLength ? text.Substring(0, maxLength) : text;
}
 

Комментарии:

1. Мне это очень нравится, поскольку я уже использую некоторые методы расширения для строк.

Ответ №2:

Как насчет

 t.Description.Take(20);
 

Редактировать

Поскольку приведенный выше код фактически приведет к массиву символов, правильный код будет выглядеть следующим образом:

 string.Join( "", t.Description.Take(20));
 

Комментарии:

1. Это вернет IEnumerable<char> — чтобы получить его в виде нужной вам строки new string(t.Description.Take(20).ToArray()) , которая становится довольно громоздкой и относительно неэффективной.

2. Джон — Как вы можете видеть, я сам понял, и я должен сказать, что первая строка кода выглядит лучше, чем до моего редактирования ;). Спасибо, что напомнили мне, что существует строковый конструктор, который принимает массив символов в качестве аргумента.

Ответ №3:

используйте

  string myShortenedText = ((t == null || t.Description == null) ? null : (t.Description.Length > maxL ? t.Description.Substring(0, maxL) : t));
 

Ответ №4:

Другой:

 var result = new string(t.Description.Take(20).ToArray());