【问题标题】:I don't know why I return IEnumerable instead of List (C#) [closed]我不知道为什么我返回 IEnumerable 而不是 List (C#) [关闭]
【发布时间】:2015-03-25 21:35:55
【问题描述】:
List<string> MealNames = FoodPlanerList.Select( p => p.Meals.ToList().Select(t => t.name).ToList<String>());  

错误 CS0266:无法隐式转换类型 System.Collections.Generic.IEnumerable&lt;System.Collections.Generic.List&lt;string&gt;&gt;' toSystem.Collections.Generic.List'。存在显式转换(您是否缺少演员表?) (CS0266) (FoodPlanViewer)

我尝试返回一个字符串列表。我有List&lt;Meals&gt;。 Meals 包含字符串名称。我无法返回带有List&lt;Meals&gt; 的所有名称的List&lt;string&gt;

【问题讨论】:

    标签: c# list generics ienumerable


    【解决方案1】:

    您有错字,您的 ) 位置错误:

    List<string> MealNames =  FoodPlanerList.Select( p => p.Meals).Select(t => t.name).ToList<String>(); 
    

    如果 Meals 是一个列表,那么 SelectMany 将是正确的函数

    List<string> MealNames =  FoodPlanerList.SelectMany( p => p.Meals).Select(t => t.name).ToList<String>(); 
    

    也许您还想插入不同的操作

    List<string> MealNames =  FoodPlanerList.SelectMany( p => p.Meals).Select(t => t.name).Distinct().ToList<String>(); 
    

    【讨论】:

    • 不,Linq 返回 IEnumerable&lt;List&lt;string&gt;&gt; 而不是 List&lt;string&gt;
    • 用你的语法 C# 无法解析 t.name
    • 这完全取决于 Meals 和 FoodPlanerList 的定义方式,但由于没有提供更多信息,因此无法解决。如果饭菜是一个列表,那么 SelectMany 将是正确的函数
    【解决方案2】:

    您正在创建一个列表列表。你说为每个条目添加这个元素到输出

    p => p.Meals.ToList().Select(t => t.name).ToList<String>()
    

    这是一个列表。所以它完全按照你说的做。如果你想要一个事物列表,那么p=&gt; thing 必须返回输出的一个元素

    你想做什么,FoodPlannerList 是什么样子的(它是什么类型)

    【讨论】:

    • 首先,对不起我的英语不好。我有 Foodplaner 类,我返回一个 List。 Foodplaner 具有字段 public String FoodPlanName {get;放; } public List 膳食{get; set;} Class Meals 有几个字段,其中一个字段是名称。我尝试显示所有 Meal.name(s)。
    • 如果你想将一个列表扁平化成一个列表,你需要使用 SelectMany
    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2015-06-01
    • 2018-01-05
    • 2015-01-10
    相关资源
    最近更新 更多