#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());