LINQ查询为何返回IEnumerable<short>而非int?蛇形转驼峰时抛CS0029错误
问题原因
- 错误码CS0029属于C#的类型不匹配编译错误,你标注的LINQ查询返回的是
IEnumerable<int>类型的整数序列,无法直接赋值给int类型的firstWordIndex变量。 - 你已经调用
Split方法按照-和_分割字符串,分割后的strSplit数组中不存在值为-或_的元素,对应where过滤条件完全无效。 - 过滤条件的逻辑运算符使用错误,即便要做排除判断也应该使用逻辑与
&&而非逻辑或||,你当前写的s != "-" || s != "_"是恒成立的表达式。 - 后续转换单词首字母大写时使用
Replace方法存在逻辑漏洞:如果单词中存在多个和首字母相同的字符,所有匹配字符都会被替换为大写,不符合需求。
修正后的代码
using System; using System.Linq; public class Kata { public static string ToCamelCase(string str) { if (string.IsNullOrEmpty(str)) return str; string[] strSplit = str.Split(new char[] { '-', '_' }, StringSplitOptions.RemoveEmptyEntries); // 直接取第一个元素作为首单词,不需要额外查索引 string firstWord = strSplit[0]; // 剩余单词首字母大写,其余字符保留原样 var restWords = strSplit.Skip(1) .Select(s => char.ToUpper(s[0]) + s.Substring(1)); return string.Concat(firstWord, string.Join("", restWords)); } }
代码说明
- 分割字符串时加入
StringSplitOptions.RemoveEmptyEntries过滤分割产生的空字符串,适配开头就是分隔符的输入场景 - 直接取分割后数组的第一个元素作为首单词,无需额外查询索引,避免LINQ序列转单值的错误
- 转换剩余单词时仅将首字符转为大写,拼接剩余字符,避免Replace方法的误替换问题
内容的提问来源于stack exchange,提问作者AYellowGalaxy
相关产品推荐
相关产品推荐

