2010-03-08 6 views
11

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

Вход:

Car 
Collection 
Limited 
stackoverflow 

Выход:

car 
colle 
limit 
stack 

word.Substring (0, 5) исключение исключений (длина)

слово.Этот (10) не очень хорошая идея, тоже ...

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

+6

Вы получаете исключение, так как автомобиль длиной всего 3 символа, и вы запрашиваете подстроку 5 символов. –

+0

да, я знаю. Ситуация намного сложнее, и это, о чем я вам рассказал, имеет самую большую проблему, из-за которой эта сложная ситуация :) – user278618

+0

Как круто, как LINQ (и я действительно думаю, что это круто), как его использовать для этого лучшего/более читаемого чем «старомодная» петля foreach? – JMarsch

ответ

22

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

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

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

+3

Вы должны добавить чек для элементов 'null'. То есть 'var subwords = words.Where (w => w! = Null). Выберите (w => w.Length> 5? W.Substring (0, 5): w);'. – jason

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

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

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

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

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

Переменная «Выход» содержит результат :

car 
Colle 
Limit 
stack 

a и строка «автомобиль» не вызывает исключения.

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

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

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

Смежные вопросы