LINQ中如何正确分配参数?代码报错问题求助
问题分析与解决方案
你的代码存在两个核心问题:
- 返回类型不匹配:方法声明返回
IEnumerable<IGrouping<char, string>>(分组序列),但select (letter = g.Key, word = g)返回的是值元组(包含char类型的键和分组对象),两者类型完全不兼容。 - 元组语法兼容问题:如果你的项目使用C# 7.0以下版本,命名元组的语法不被支持,会触发编译器报错“letter、word在当前上下文中不存在”。
修正方案1:返回分组本身(符合原方法返回类型)
如果需求是获取按首字母分组的结果,直接返回group by生成的分组即可——IGrouping<char, string>本身就包含了分组键(Key属性)和分组内的所有元素(实现了IEnumerable<string>),不需要额外的select操作。
修正后的代码:
public static IEnumerable<IGrouping<char, string>> GroupByProperty() { string[] words = {"blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese"}; IEnumerable<IGrouping<char, string>> query = from w in words group w by w[0] into g select g; return query; }
修正方案2:返回键与分组的元组(修改返回类型)
如果确实需要将分组键和分组对象作为一个整体返回,需修改方法的返回类型为对应的值元组类型,同时确保项目使用C# 7.0及以上版本(支持值元组语法)。
修正后的代码:
public static IEnumerable<(char letter, IGrouping<char, string> word)> GroupByProperty() { string[] words = {"blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese"}; var query = from w in words group w by w[0] into g select (letter: g.Key, word: g); return query; }
内容的提问来源于stack exchange,提问作者Dibldop
相关产品推荐
相关产品推荐

