C# 如何返回IEnumerable<'a>类型对象及解决CS0266编译报错
错误原因
你遇到的CS0266报错核心是类型不匹配:方法声明的返回值类型为IEnumerable<Phone>,但你通过LINQ分组后生成的是包含品牌名+对应手机列表的匿名类集合,二者无法隐式转换。
解决步骤
你需要先定义一个承载分组嵌套结构的实体类,再修改方法返回类型即可:
1. 新增分组实体类
// 存储按品牌分组后的嵌套数据 class BrandGroup { public string BrandName { get; set; } public IEnumerable<Phone> Phones { get; set; } }
2. 修改完整业务代码
class Phone { public string Name { get; set; } public string Company { get; set; } } class Program { static void Main(string[] args) { // 修改返回类型为BrandGroup的集合 IEnumerable<BrandGroup> GetInfo() { List<Phone> phones = new List<Phone>() { new Phone {Name="Lumia 430", Company="Microsoft" }, new Phone {Name="Mi 5", Company="Xiaomi" }, new Phone {Name="LG G 3", Company="LG" }, new Phone {Name="iPhone 5", Company="Apple" }, new Phone {Name="Lumia 930", Company="Microsoft" }, new Phone {Name="iPhone 6", Company="Apple" }, new Phone {Name="Lumia 630", Company="Microsoft" }, new Phone {Name="LG G 4", Company="LG" } }; var result = from phone in phones group phone by phone.Company into g // 不再生成匿名类,直接实例化BrandGroup select new BrandGroup { BrandName = g.Key, Phones = g.Select(p => p) }; return result; } // 调用示例,输出你需要的嵌套格式 var data = GetInfo(); int brandIndex = 0; foreach (var brand in data) { Console.WriteLine($"[{brandIndex}] {brand.BrandName}"); Console.WriteLine("{"); int phoneIndex = 0; foreach (var phone in brand.Phones) { Console.WriteLine($" [{phoneIndex}].{phone.Name}"); phoneIndex++; } Console.WriteLine("}"); brandIndex++; } } }
运行以上代码就能得到你示例中的嵌套列表输出效果。
内容的提问来源于stack exchange,提问作者just
相关产品推荐
相关产品推荐

