如何使用LINQ将数组中的每个元素转换为大写?

5

我有这个LINQ表达式:

string[] x = originalString.Split(',').ToList().ForEach(y => y.Substring(0,1).ToUpper());

我遇到了这个错误信息:

Cannot convert source type 'void' to target type 'string[]'

我想我明白了错误的原因:ForEach返回的是void。我不确定如何修复它并仍然保持这是一个LINQ表达式。

如何拆分originalString,并循环遍历数组中的元素,在每个元素上应用.ToUpper(),并在一个LINQ表达式中完成所有操作?


一般来说,只有在需要将结果实例化之后 存储 到某个地方时,才应使用 ToArrayToList 方法。如果你在滥用 Array 或 List<T> 的方法,那么你就做错了。 - user7116
2个回答

14
string[] x = originalString.Split(',')
                           .Select(y => y.Substring(0,1).ToUpper())
                           .ToArray();

应该做的事情是 - 获取每个单词的首字母,并将其大写。

但我认为你真正想要的是:

string[] x = originalString.Split(',')
                           .Select(y => y.Substring(0, 1).ToUpper() + y.Substring(1))
                           .ToArray();

这应该会将从输入中分离出的元素大写(听起来更有用)。

第二个查询的使用示例:

 string originalString = "TestWord,another,Test,word,World,Any";

输出:

TestWord
Another
Test
Word
World
Any

是的,我想将每个元素的第一个字母大写,并保留整个单词。 - DenaliHardtail
所以第二个查询应该可以完成这件事! - MarcinJuraszek

1
使用投影:
string[] x = originalString.Split(',')
    .Select(y => y.Substring(0,1).ToUpper()).ToArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接