【问题标题】:Explanation of IEnumerable [closed]IEnumerable 的解释[关闭]
【发布时间】:2012-09-26 14:03:43
【问题描述】:

在下面我截取了我正在查看的代码的一部分。我不明白代码的 IEnumerable 部分。有人可以带我了解每行的含义吗?谢谢

我不明白 Where(u =>) 比其他人更多。

  public static List<AAlexUsers.Models.SearchClass> Users(string userId, string email, string lastFourdigits)   
    {
        SearchClass Alex = new SearchClass();
        Alex.userId = "1234";
        Alex.email = "Alex@gmail.com";
        Alex.lastFourdigits = "1885";

        SearchClass Emilio = new SearchClass();
        Emilio.userId = "0928";
        Emilio.email = "Cubano@gmail.com";
        Emilio.lastFourdigits = "0706";

        SearchClass Ulysses = new SearchClass();
        Ulysses.userId = "0914";
        Ulysses.email = "lysses@gmail.com";
        Ulysses.lastFourdigits = "01zx";

        var list = new List<SearchClass>();
        list.Add(Alex);
        list.Add(Emilio);
        list.Add(Ulysses);

        IEnumerable<SearchClass> result = list;
         if (!string.IsNullOrEmpty(userId))
            result = result.Where(u => u.userId == userId);
        if (!string.IsNullOrEmpty(email))
            result = result.Where(u => u.email == email);
        if (!string.IsNullOrEmpty(lastFourdigits))
            result = result.Where(u => u.lastFourdigits == lastFourdigits);


        return list.ToList();

    }

【问题讨论】:

  • 这是 LINQ - 如果你把它读成英文.. 你认为它有什么作用?
  • 听起来更像是“有人可以用勺子喂我”
  • 因为你可能没有做过谷歌搜索谁知道
  • 可能是因为您没有在 google 中输入“IEnumerable”并阅读了 10000 个现成的解释中的任何一个。

标签: c# asp.net asp.net-mvc-3


【解决方案1】:

许多 LINQ 方法,包括 Where,都使用延迟执行。在这种情况下,您可以将 IEnumerable 视为一个查询,而不是实际的结果集。通过添加 Where 语句,您实际上并没有做任何事情,您只是在查询中添加了一个额外的过滤器,以便稍后在您实际评估序列时(在这种情况下,当 ToList 是调用)这些过滤器都将被应用。

这段代码的意思是,如果指定了userId,则在数据上添加一个过滤器,以便仅包含userId 与该变量匹配的项目。 emaillastFourdigits 也是如此。

【讨论】:

  • @Jay 谢谢,只是在重新阅读时注意到。
【解决方案2】:

IEnumerable 是 SearchClass 对象的集合。将其视为列表或数组。

IEnumerable 是一个通用接口,描述了可以枚举的东西(您可以遍历它并查看/检索它的所有元素)。此 IEnumerable 的内容可以是预先生成的,或者是在您尝试迭代“结果”(IEnumerable)时实时/延迟生成的。

下一行是针对这个“结果”列表运行的查询:

result = result.Where(u => u.userId == userId);

可能会造成混淆,因为它将查询的返回分配给运行查询的数据。 让我们举一个更简单的例子:

var myResult= myEnumerableList.Where(u => u.userId == "Yusuf");

表示“var myResult”包含来自 myEnumerableList 的所有元素,仅当此元素(此处称为“u”)具有等于“Yusuf”的属性 userId 时

.Net 提供了强大的方法来查询集合/列表/anything_enumerable,并以类似 SQL 的语法呈现

【讨论】:

    【解决方案3】:

    这是Linq,(位置、选择等...)

    =&gt;这是 lambda 表达式

    IEnumerable 是 .Net 中所有可迭代事物的接口

    你可以用谷歌搜索每个部分的详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 2011-06-10
      • 2011-03-31
      • 1970-01-01
      • 2014-06-16
      • 2014-09-24
      相关资源
      最近更新 更多