【问题标题】:Get first Item in list获取列表中的第一项
【发布时间】:2013-11-17 15:15:38
【问题描述】:

我正在使用这个函数来获取组列表

public static IEnumerable<QuizGroups> GetGroups(string sectorId)
{

    var Quizes = _QuizDataSource.AllQuizGroups.Where(x => x.Subtitle == sectorId);
    return Quizes;

}

但这会返回所有,我想返回列表中的第一组。

如何更改语句以获得第一组?

【问题讨论】:

  • 看看First或FirstOrDefault
  • ... 并将返回值更改为 QuizGroups

标签: c# linq list ienumerable


【解决方案1】:

您可以使用 First 或 FirstOfDefault 并返回单个元素的可枚举:

    public static IEnumerable<QuizGroups> GetGroups(string sectorId)
    {
        return new[]
        {
            _QuizDataSource.AllQuizGroups.FirstOrDefault(x => x.Subtitle == sectorId)
        };
    }

另请注意:

  • 如果您计划始终只返回一个元素,请考虑重构 GetGroups 方法以仅返回 QuizGroups
  • AllQuizGroups 属性可能为空。为该属性添加空检查。
  • 您应该考虑使用 C# 命名约定。
    • 局部变量名应该是驼峰式;所以应该是:var quizes
    • 如果属性 _QuizDataSource 是公共的,则应将其重命名为 QuizDataSource;如果它是私有的,则应将其重命名为 _quizDataSourcequizDataSource。¹

¹ — 是否将 _ 用于私有字段是一场激烈的辩论,更多信息请访问:https://stackoverflow.com/questions/1630844/c-sharp-member-variables-fields-naming-convention

【讨论】:

    【解决方案2】:

    试试FirstFirstOrDefault

    public static IEnumerable<QuizGroups> GetGroups(string sectorId)
    {
    
    var Quizes = _QuizDataSource.AllQuizGroups.FirstOrDefault(x => x.Subtitle == sectorId);
    return Quizes;
    
    }
    

    【讨论】:

    • FirstOrDefault 不返回 IEnumerable
    • 应该是public static QuizGroups getGroups(string sectorId) {...}
    【解决方案3】:
    public static QuizGroups GetGroups(string sectorId)
    {  
         return  QuizDataSource.AllQuizGroups.FirstOrDefault(
                   x => x.Subtitle == sectorId);
    }
    

    或者在集合类中添加一个索引器(假设MyQuizGroupsCollection_QuizDataSource的类型

     public class MyQuizGroupsCollection: IEnumerable<QuizGroups>
     {
         // other stuff
         public QuizGroups this[string sectorId]
         { get  { return FirstOrDefault(x => x.Subtitle == sectorId); } }
     }
    

    ...那么你可以简单地写

      var Quizes = _QuizDataSource[sectorId];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      相关资源
      最近更新 更多