Подстрока с linq?

У меня есть коллекция слов, и я хочу создать коллекцию из этой коллекции, ограниченную 5 символами

Input:

Car
Collection
Limited
stackoverflow

Вывод:

car
colle
limit
stack

word.Substring(0,5) throws exception (length)

word.Take(10) тоже не очень хорошая идея...

Любые хорошие идеи?

Ответ 1

LINQ для объектов для этого сценария? Вы можете сделать выбор следующим образом:

from w in words
select new
{
  Word = (w.Length > 5) ? w.Substring(0, 5) : w
};

По существу,?: помогает вам решить эту проблему.

Ответ 2

var words = new [] { "Car", "Collection", "Limited", "stackoverflow" };
IEnumerable<string> cropped = words.Select(word => 
                                    word.Substring(0, Math.Min(5, word.Length)));

Ответ 3

Что-то, что вы можете сделать,

string partialText = text.Substring(0, Math.Min(text.Length, 5));

Ответ 4

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

var x = new string[] {"car", "Collection", "Limited", "stackoverflow" };
var output = x.Select(word => String.Join("", word.Take(5).ToList()));

Переменная "output" содержит результат:

car 
Colle 
Limit
stack 

и строка "автомобиль" не генерирует исключения.

Но в то время как Join и Take (5) работает, он обычно намного проще использовать, как было предложено в другом ответе,

subString = word.Substring(0,Math.Min(5,word.Length));

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