考虑一下:
string test = "";
somestring.ToList().Take(50).Select(
delegate(char x)
{
test += x;
return x;
}
);
Run Code Online (Sandbox Code Playgroud)
现在为什么之后测试是空的?我不关心它的回归,实际上我知道它的IEnumerable.
任何方式,如果这一切似乎一团糟然后如何转换IEnumerable<char>为字符串?
提前致谢..
And*_*rey 21
因为您没有执行查询.Linq很懒.当你做任何一个foreach或ToList/ ToArray/ 时它将被执行ToDictionary.
我建议那样做
string test = new string(somestring.Take(50).ToArray());
Run Code Online (Sandbox Code Playgroud)
甚至使用
string test = somestring.Substring(0, 50);
Run Code Online (Sandbox Code Playgroud)
更多内容.Select旨在按顺序对每个元素应用某种变换.此操作也称为map.如果你想从序列中产生单个元素,那Aggregate就是reduce.它不是懒惰,它强制执行查询.
Jon*_*eet 15
(其他人解释了为什么它不起作用.)
你的问题并不完全在此刻意义-目前还不清楚是否会实际处理一个IEnumerable<char>或一个IEnumerable<string>.(您的文字建议IEnumerable<string>;您的代码建议IEnumerable<char>).如果它是一个IEnumerable<string>你正在使用.NET 4,它真的很容易:
string combined = string.Join("", list.Take(50));
Run Code Online (Sandbox Code Playgroud)
如果您使用的是.NET 3.5,它仍然非常简单:
string combined = string.Join("", list.Take(50).ToArray());
Run Code Online (Sandbox Code Playgroud)
如果你想要字符串之间的分隔符,显然使用类似","的东西.
如果你正在与一名将军打交道,IEnumerable<char>那就用吧
string combined = new string(chars.Take(50).ToArray());
Run Code Online (Sandbox Code Playgroud)
如果您实际上正在处理一个字符串,请使用Substring:)
| 归档时间: |
|
| 查看次数: |
22363 次 |
| 最近记录: |