2014-09-23 185 views
1

我必须大写每个单词的最后一个字母。无法将lambda表达式转换为委托类型'System.Func <char,bool>'

输入:这是堆放超过流量

输出:这是堆栈溢出流

我试着用下面的代码来实现它:

return String.Join(" ", s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(c => c.Last((s1 => Char.ToUpper(s1))))); 

但不编译。

我对声明两个错误Char.ToUpper(s1)

错误1:

不能键入 '字符' 隐式转换为 '布尔'

错误2:

无法转换lambda表达式的委托类型 “System.Func”,因为一些块 的返回类型不隐式转换为委托返回类型

+4

这里的问题是'Last'可选择一个*谓词*;它是“与{this}过滤器匹配的最后一件事物”;不是“用{这}与最后一件事” – 2014-09-23 15:42:24

+0

@MarcGravell感谢您的解释 – Shaharyar 2014-09-23 15:49:24

回答

5

这个是什么?

var result = String.Join(" ", s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
      .Select(c => c.Substring(0, c.Length - 1) + char.ToUpper(c.Last()))); 

它采用单词的整个子字符串并只改变最后一个字符。

+0

问题解决了!你能解释一下那里的实际问题吗?我无法理解错误。 – Shaharyar 2014-09-23 15:44:36

+0

有几个,最重要的是不正确使用'Last'。这导致了转换等方面的主要问题。仅最后一次调用导致只有最后一个字符的字符串,因此您必须将第一部分作为子字符串。 – 2014-09-23 15:46:08

+0

我明白了。 'Last'需要一个'条件语句',我是多么愚蠢 – Shaharyar 2014-09-23 15:48:11

相关问题