linq Last() 如何确定最后一项?

2024-01-29

我不明白 Current 如何可以为 null 而 LINQ 函数 Last() 可以返回一个对象。我认为 Last 使用 GetEnumerator 并一直持续到 current == null 并返回对象。然而,正如您所看到的,第一个 GetEnumerator().Current 为 null,最后一个以某种方式返回一个对象。

linq Last() 如何工作?

items.GetEnumerator().Current
items.Last()

从使用反射器 http://www.red-gate.com/products/reflector/ on System.Core.dll:

public static TSource Last<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    IList<TSource> list = source as IList<TSource>;
    if (list != null)
    {
        int count = list.Count;
        if (count > 0)
        {
            return list[count - 1];
        }
    }
    else
    {
        using (IEnumerator<TSource> enumerator = source.GetEnumerator())
        {
            if (enumerator.MoveNext())
            {
                TSource current;
                do
                {
                    current = enumerator.Current;
                }
                while (enumerator.MoveNext());
                return current;
            }
        }
    }
    throw Error.NoElements();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linq Last() 如何确定最后一项? 的相关文章

随机推荐

  • Membership.DeleteUser 未删除用户的所有相关行

    Membership DeleteUser 设法删除我要删除的用户的用户配置文件 为什么它不删除它存储在的信息webpages membership 我目前没有使用角色 因此请记住这一点以获取答案 我进行了测试并验证了这一点SimpleMe
  • 可重用预处理器 __COUNTER__

    我正在做一些模板元编程 主要是编写我自己的编译时间列表 但我也有一些预处理器魔法 我想用它们来使事情变得更容易 如果可能的话 我想做的是创建一个函子的编译时列表 该部分已完成 但用于简化创建 并添加到列表中 的宏尚未完成 简单举个例子 te
  • 如何实现Web应用程序的屏幕共享? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Prologue 我想问 如何创建在网络上共享桌面屏幕的解决方案 但后来发现有很多这样的问题 这个任务非常复杂 无法用几个字符串来回答
  • 如何防止我的 .Net dll 被添加为引用?

    假设我编写了一个 Net dll 并希望将其与我的应用程序一起分发 我怎样才能防止任何有能力安装 VS 副本的用户向自己的应用程序添加对此 dll 的引用 无法阻止用户添加引用 这是 DLL 部分的被动操作 您无法采取任何措施来阻止它发生
  • 如果不存在则创建

    我有一个 Django 应用程序 它从 Web API 读取数据并将其放入数据库中 有没有办法从模式创建新对象 但如果对象已经存在 则可以防止重复异常 换句话说 有没有办法保存一个对象 但如果它已经存在则什么都不做 Model object
  • 通过 Powershell 在 IIS 7.5 中启用模拟

    我希望有人可以提供帮助 我正在尝试在 IIS 7 的身份验证会话下启用 ASP Net 模拟 我已使用以下命令启用了其他部分 Set WebConfigurationProperty filter system WebServer secu
  • 在 Perl 中启动非等待后台进程

    我有一个 Perl 脚本 需要在后台启动另一个进程并退出 而不等待其他脚本完成 StackOverflow 上有很多线程介绍如何在 Perl 中等待或如何不等待其他编程语言 但我似乎找不到 Perl 的正确答案 我已经阅读了相当多的内容 并
  • 为什么 foreach %dopar% 每增加一个节点就会变慢?

    我编写了一个简单的矩阵乘法来测试网络的多线程 并行化功能 我注意到计算速度比预期慢得多 The Test很简单 乘以 2 个矩阵 4096x4096 并返回计算时间 矩阵和结果都不被存储 计算时间并非微不足道 50 90 秒 具体取决于您的
  • 如何向枚举添加多个属性?

    我有一个名为的 SQL 查找表客户信用解决计划行动类型我想转换为enum questions tagged enum in c questions tagged c 23 非常基本的要求 对吧 正确的 我的桌子 现在enum questio
  • co_await 似乎不是最理想的?

    我有一个异步函数 void async foo A a B b C c function
  • IE11框架通知栏保存按钮

    在装有 MS Excel 2010 和 IE11 的 64 位系统上 我使用此代码自动从网站下载过程 hWnd FindWindowEx IE hWnd 0 Frame Notification Bar vbNullString If hW
  • 如何将文件读入整数数组

    在我的应用程序文档文件夹中 我有一个文件 我试图将其逐字节读入数组UInt8其中每个元素代表一个字节 我该怎么做呢 该文件恰好名为 Q1 dat 这是我不成功的尝试 func readArray gt Int if let arrayPat
  • 使用 angular2 显示/隐藏密码文本

    我想根据用户点击显示 隐藏密码文本 但我收到以下错误消息 export class App password secret show false ContentChild ShowHideInput input ShowHideInput
  • 同一手臂上不同类型的模式匹配

    我想知道当两个或多个不同的枚举类型具有相同的数据成员或相同的函数时 是否有一种方法可以简化以下模式匹配臂 如果没有 最好解释一下原因 UPDATE 根据要求提供我想要的更准确的示例 请原谅我将数据成员访问与函数混淆 struct Point
  • Hibernate 验证器:@Email 接受ask@stackoverflow 为有效吗?

    我正在使用 Email用于验证电子邮件地址的注释 我遇到的问题是它接受诸如ask stackoverflow作为有效的电子邮件地址 我想这是因为他们想支持 Intranet 地址 但我似乎找不到标志 所以它确实检查扩展名 我真的需要切换到
  • 将 ListView 绑定到 ListProperty

    在tornadoFX中是否可以将ListView绑定到ListProperty 我有一个如下所示的 ViewModel class MyVm ItemViewModel
  • 使用带有 nginx 的 React 路由器应用程序获取 404 [重复]

    这个问题在这里已经有答案了 我有一个反应前端应用程序 它使用反应路由器来创建不同的路线 在开发服务器上它工作正常 但是当我构建项目时 它给我 404 同时直接使用不同的路由访问它 网站完美打开xyz net 当我尝试使用以下命令访问它时 它
  • 使用 ssh 访问存储库

    昨天我发现了 git 这样的东西的存在 我需要使用 ssh 访问远程存储库 我使用了命令 git clone email protected cdn cgi l email protection email protected cdn cg
  • 用于创建事件处理程序存根的 Visual Studio 键盘快捷键

    当您在设计视图中编辑简单页面时 只需双击相关事件即可在大多数组件上添加事件 这将完成绑定并在代码隐藏中为您生成函数声明 在页面复杂的大型项目中 设计视图可能会非常慢 有没有一种方法可以直接从代码快速生成代码隐藏存根 aspx source
  • linq Last() 如何确定最后一项?

    我不明白 Current 如何可以为 null 而 LINQ 函数 Last 可以返回一个对象 我认为 Last 使用 GetEnumerator 并一直持续到 current null 并返回对象 然而 正如您所看到的 第一个 GetEn