ForEach 方法后 PowerShell 长度的奇怪行为

2023-12-14

In 官方文件据说Length是一个别名Count,但是我发现他们的行为有所不同的一种情况。另外,如果我更换ForEach方法与ForEach-Object, the Length会发出 3. 谁能解释一下吗?

> (1..3).ForEach({$_}).Length
1
1
1
> (1..3).ForEach({$_}).Count
3

.Length and .Count是彼此的别名,所谓内在成员PowerShell 添加的(属性)most objects,为了统一处理标量和集合(参见这个答案为背景)。

The 例外是 PowerShell 视为的类型的对象收藏品,即对象自动列举在管道中,其中包括类型的实例[System.Collections.ObjectModel.Collection[psobject]].ForEach()数组法返回。

PowerShell 可以not add .Length and .Count属性到它所认为的集合的实例,因为它假设它们具有这样的属性他们自己,本地类型,假设已实现有效率的(而不是 PowerShell 必须执行枚举并对元素进行计数)。

这是一个合理的假设通常成立于.Count, but rarely for .Length(数组(System.Array)是一个值得注意的例子,其中.Length存在并返回元素计数)。

Thus, 通常更好用.Count而不是.Length.


当您访问.Length在 PowerShell 认为是集合的类型的实例上,但该类型没有此类类型本机属性,PowerShell 会执行成员访问枚举:

  • 也就是说,它枚举集合并返回elements' .Length属性值。

  • 在你的情况下,因为元素是scalars(单身的[int]对象),他们do固有的 .Length属性,在标量的情况下总是返回1.

所以:

(1..3).ForEach({$_}).Length

实际上等同于:

(1..3).ForEach({ $_.Length })

上面解释了(1, 1, 1) 输出。 相比之下,[System.Collections.ObjectModel.Collection[psobject]]确实有一个类型本机 .Count属性,它按预期返回元素的计数。


背景资料:

Note:

  • 仅 PowerShell 执行的那些类型not考虑集合获得内在的.Count and .Length特性。

  • 相反,键入are所考虑的集合可能具有也可能不具有任何、其中一个或两个此类属性本地类型,并且在没有类型本机属性的情况下成员访问枚举而是执行。

    • 值得注意的类型示例neither属性类型本身是惰性枚举; e.g., [Linq.Enumerable]::Range(1,3).Count yields 1, 1, 1.

PowerShell 认为哪些 .NET 类型是集合(可枚举),因此会在管道中自动枚举:

  • Any 实现的类型 the IEnumerable / IEnumerable`1.NET 接口

    • Except以下是not自动枚举:

      • IDictionary / IDictionary`2,其中特别包括[hashtable] (@{ ... },作为字面意思)及其有序表兄弟,OrderedDictionary ([ordered] @{ ... },作为字面意思)

      • XmlNode,基本类型为[xml] (XmlDocument)

      • Strings (String);注意'foo'.Count is 1(反映字符串被认为是的内在属性scalar(单一事物)),而'foo'.Length is 3(返回字符计数的类型本机属性)。

  • 此外, System.Data.DataTable (which itself不执行IEnumerable,仅其.Rows财产确实)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ForEach 方法后 PowerShell 长度的奇怪行为 的相关文章

随机推荐

  • 如何更改 Android 中的代理设置(尤其是 Chrome)[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 您能帮我一下吗 是否可以在 Android 中设置代理设置 尤其是在 Chrome 中 我在测试期间必须更改 Android 上的 IP 或者有什么软件可以帮助我解决这个问题 找到了
  • 如何连接mysql和Basex?

    我有一个使用 Mysql 作为数据库的应用程序 它使用了大量的 XML HTML 我想在 BaseX 中处理 mysql 数据并通过它更新数据库 有没有简单的方法连接数据库 我检查了http docs basex org wiki SQL但
  • HTTP.sys 请求队列和 IIS 应用程序池之间的关系

    我从中读到了这篇文章 HTTP sys 为每个工作进程维护一个请求队列 它将 HTTP 请求发送到工作进程的请求队列 该工作进程为所请求的应用程序所在的应用程序池提供服务 对于每个应用程序 HTTP sys 维护具有一个条目的 URI 命名
  • Javascript读取大文件失败

    JSON 文件大小为 6 GB 当用下面的代码读取时 var fs require fs var contents fs readFileSync large file txt toString 它有以下错误 buffer js 182 t
  • 如何用新行显示阅读提示

    我在用着read内置来读取变量 但我想让输入出现在下一行 即提示符输出一个新行 但两者都不起作用 read p Please input n name Please input n read p Please input n name Pl
  • java:如何使用 .txt 中的数据创建多个数组

    所以这是我必须编写的第一个真正的java程序 我对java也很陌生 该程序必须使用 2 个命令行参数运行 这些参数假定为 x 和 y 坐标 然后确定坐标所在的市和县 为此 我想使用 绕数 但是在开始程序的这些部分之前 我首先需要创建并填充不
  • 如何在 solr4 中对存储在其他服务器上的 XML 文件建立索引

    我将所有 XML 文件存储到另一台服务器上 并且我已在不同服务器上安装和配置 SOLR 我如何将这些 XML 文件索引到 SOLR 我已经检查过 nutch 但它的主要目的是抓取 html 页面并为其建立索引 我不需要爬行 我将所有这些文件
  • 使用 dplyr 对多列求和时忽略 NA

    我正在对多列进行求和 其中一些列不适用 我在用 dplyr mutate 然后写出各列的算术和以获得总和 但这些列有 NA 我想将它们视为零 我能够让它与 rowSums 一起使用 见下文 但现在使用 mutate 使用 mutate 可以
  • 在使用 Python 的 matplotlib 制作动画期间,第一组(散点)绘图数据保留在图表上

    我正在尝试为图表上的一条线和 3 个散点制作动画 除了图表上的第一组散点没有被删除之外 一切似乎都正常 这是代码 您可以尝试将 n 设置为 1 2 或 3 import numpy as np from math import from p
  • 当前可用的最好的 Ajax 历史记录和书签插件 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 似乎每个 Ajax 历史记
  • 如何为 Apache-CXF JAX-WS 启用 Spring Security

    如何在 Apache CXF 上为 apache JAX WS 启用 Spring Security 网络上的示例包括 Jax RS 示例 但我不使用 Jax RS 我不想使用 cxf 的安全性 如何在我的代码中实现它 两种可能的方式 Pu
  • gitignore 没有扩展名的二进制文件

    如何在中忽略二进制文件git使用 gitignore file 例子 g hello c o hello hello 文件是一个二进制文件 能git忽略这个文件 Ignore all Unignore all with extensions
  • Excel VBA 强制关闭 IE

    我目前正在使用以下子程序在自动化后关闭我的 IE Public Sub CloseIE Dim Shell As Object Dim IE As Object Set Shell CreateObject Shell Applicatio
  • 运算符重载中的类数据封装(私有数据)

    下面是代码 代码 访问说明符适用于类级别 而不是实例级别 因此Rational类可以查看任何其他类的私有数据成员Rational实例 自从你的Rational operator 是一个成员函数 它可以访问它的私有数据Rational争论 注
  • jquery动态绑定.on()选择父母还是孩子?

    例如 dataTable tbody tr on click function alert this text dataTable tbody on click tr function alert this text on 将 tr 与单击
  • opengl:将原点更改为左上角

    我在将 openGL 原点设置为视图的左上角时遇到问题 因此 在我的窗口调整大小处理程序中 我执行以下操作 ox and oy are some offsets and width and height are the required v
  • 有没有更好的方法来找出本地 git 分支是否存在?

    我正在使用以下命令来查明是否localgit 分支与branch name存在于我的存储库中 它是否正确 有没有更好的办法 请注意 我是在脚本内执行此操作 为此我想使用管道命令如果可能的话 git show ref verify quiet
  • Itextsharp:在一页上调整 2 个元素

    所以 我在使用 C NET 4 0 WinForms 和 iTextSharp 5 1 2 时遇到了这个问题 我在数据库中存储了一些扫描图像 需要使用这些图像即时构建 PDF 有些文件只有一页 而其他文件则有数百页 使用以下方法工作得很好
  • 错误:VB 运行时未加载

    根据社区的建议编辑版本 In a Windows 8 1电话项目 一部分VB Net还带有商店应用程序和可移植类库的解决方案 我收到此错误消息 由于未加载 VB 运行时 无法调用 但据我所知 尽管如此 代码仍在运行 直到 最终弹出一个错误
  • ForEach 方法后 PowerShell 长度的奇怪行为

    In 官方文件据说Length是一个别名Count 但是我发现他们的行为有所不同的一种情况 另外 如果我更换ForEach方法与ForEach Object the Length会发出 3 谁能解释一下吗 gt 1 3 ForEach Le