LINQ语法是否正确?Split方法报错:无法将string转换为char
问题:LINQ编译错误——无法将string转换为char
我在使用LINQ编写代码时遇到编译错误,无法定位问题所在。代码如下:
return string.IsNullOrEmpty(allSongsDuration) ? new TimeSpan() : TimeSpan.FromSeconds( allSongsDuration.Split(",") .Select(songDurationAsString => TimeSpan.ParseExact( songDurationAsString, @"m\:ss", null)) .Sum(timespan => timespan.TotalSeconds));
上述代码在allSongsDuration.Split(",")行报错:“can not convert from 'string' to 'char'”。我使用的是VS2017,该语法是否存在版本相关问题?我想要按逗号分割allSongsDuration以计算总时长。
问题原因与解决方法
错误原因
string.Split()方法有多个重载,其中接受单个char参数的重载优先级高于接受string[]的重载。你传入的是双引号包裹的字符串",",编译器会尝试将其转换为char类型,但字符串无法直接转成单个字符,因此抛出错误。这和VS2017版本无关,属于语法使用错误。
解决方法
有两种可行的修正方式:
- 改用字符类型的分隔符,用单引号包裹逗号:
allSongsDuration.Split(',') - 使用接受字符串数组的重载(适合复杂分割场景):
如果分割后存在空字符串,可添加allSongsDuration.Split(new string[] { "," }, StringSplitOptions.None)StringSplitOptions.RemoveEmptyEntries过滤掉空项。
优化后的完整代码
建议同时添加字符串修剪和指定文化信息,避免解析时出现意外问题:
return string.IsNullOrEmpty(allSongsDuration) ? new TimeSpan() : TimeSpan.FromSeconds( allSongsDuration.Split(',') .Select(songDurationAsString => TimeSpan.ParseExact( songDurationAsString.Trim(), @"m\:ss", System.Globalization.CultureInfo.InvariantCulture)) .Sum(timespan => timespan.TotalSeconds));
内容的提问来源于stack exchange,提问作者Kel
相关产品推荐
相关产品推荐

