如何将IEnumerable <char>转换为IEnumerable <string>?

时间:2018-04-16 02:42:10

标签: c# lambda

以下是代码:

List<string> SecurityCodePreSend = new List<string> { "1", "2", "3", "4" };
List<string> SecurityCodeSended = new List<string>();

我想将SecurityCodePreSend的前15个添加到SecurityCodeSended,所以我使用Lambda的Take来完成它。

SecurityCodeSended.AddRange(SecurityCodePreSend.Select(n => n.Take(15)));

但是,Visual Studio报告的错误无法将IEnumerable<char>转换为IEnumerable<string>

我用谷歌搜索,发现有人说string.Concat可以解决它。我试过并失败了。

如何将IEnumerable<char>转换为IEnumerable<string>?谢谢。

1 个答案:

答案 0 :(得分:3)

IEnumerable<String>.Select( n => n.Take(15) )不符合您的想法:n中的.Select( n => )代表父String中的每个IEnumerable<String>值,因此{{1获取每个字符串值的前15个字符,而不是前15个字符串值。

(这是因为Linq扩展方法适用于任何 Select( n => n.Take(15) )IEnumerable<T>String(用于公开字符串中的每个字符)。) / p>

你只需要这样:

IEnumerable<Char>

现在,对于一些迂腐:

我注意到您的代码应符合C#/ .NET命名约定:

  • 方法参数和(在本例中)局部变量应为SecurityCodeSended.AddRange( SecurityCodePreSend.Take(15) )
  • 公共和受保护的实例成员应为camelCase
  • 静态字段应该(在我看来)以下划线PascalCase
  • 作为前缀
  • 实例成员应始终以_
  • 为前缀

如果应该使用C#关键字this.而不是正确的类型名称string,最后String无效英语(Sended )语法,正确的形式是en-US。如果我们将这些组合在一起,您的代码应该是:

Sent