带linq的子串?

时间:2010-03-08 15:48:08

标签: c# linq string

我收集了一些单词,我想从这个限量为5个字符的集合创建集合

输入:

Car
Collection
Limited
stackoverflow

输出:

car
colle
limit
stack

word.Substring(0,5)抛出异常(length)

word.Take(10)也不是个好主意......

有什么好主意吗?

4 个答案:

答案 0 :(得分:22)

LINQ to this scenario for this scenario?您可以执行以下选择:

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

基本上,?:解决了这个问题。

答案 1 :(得分:8)

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

答案 2 :(得分:2)

你可以做的事情是

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

答案 3 :(得分:0)

我相信你所寻找的那种答案看起来像这样:

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

变量“output”包含结果:

car 
Colle 
Limit
stack 

并且字符串“car”不会抛出异常。

但是,虽然Join和Take(5)有效,但使用起来通常要简单得多,正如另一个答案中所建议的那样,

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

后一个代码更具人性化和轻量级,但在字符串上使用Linq获取前五个字符肯定有一点冷静因素,而不必检查字符串的长度。