gpt4 book ai didi

PowerShell 理解 Get-Member

转载 作者:行者123 更新时间:2023-12-01 13:10:10 25 4
gpt4 key购买 nike

我在理解“获取成员”定义列时遇到问题。我在做:

$Array = "ans", "zwei","drei"

$Array.GetType() 返回 - 正如预期的那样 - BaseType=System.Array

然后:

$Array | gm 

没有提及方法 Add() - 这是正确的,因为 $Array 是一个数组。

但是:

gm -inputobject $Array 

正在向我展示一个 Add()-Method,其定义

int IList.Add(System.Object value).

当然:$Array.Add("vier") 不起作用。
我知道:IList 是一个接口(interface)等。但它在这里完全错误,因为我们正在谈论数组类型的变量?

为了使困惑变得完美:我的 ISE(PS 版本:4)的智能感知也显示了 Add()-Method。

真是一团糟。如何使用Get-Member正确理解“定义”列?

最佳答案

这个对象的类型:

$Array = "ans","zwei","drei"

如果 不是 System.Array,而是 Object[] - 一种直接继承自 System.Array< 的集合类型,但不等同于.

如果你深入挖掘,你会发现 $Array 的类型实际上实现了 IList:

PS C:\> $Array.GetType().ImplementedInterfaces
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False ICloneable
True False IList
True False ICollection
True False IEnumerable
True False IStructuralComparable
True False IStructuralEquatable
True False IList`1
True False ICollection`1
True False IEnumerable`1
True False IReadOnlyList`1
True False IReadOnlyCollection`1

原因 $Array | gm 不显示 Add() 方法是当您将 $Array 传递给 gm 时,管道会尝试枚举$Array 的内容,以及 gm 向您显示的实际上是所包含类型的成员 - System.String:

enter image description here

要获取数组对象本身的成员而不是数组元素的成员,您必须通过 -InputObject 方法将其传递给 Get-Member:

PS C:\> Get-Member -InputObject $Array

TypeName: System.Object[]

Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
Add Method int IList.Add(System.Object value)
Address Method System.Object&, mscorlib, Version=4.0.0.0, C...
Clear Method void IList.Clear()
Clone Method System.Object Clone(), System.Object IClonea...
CompareTo Method int IStructuralComparable.CompareTo(System.O...
Contains Method bool IList.Contains(System.Object value)
CopyTo Method void CopyTo(array array, int index), void Co...
Equals Method bool Equals(System.Object obj), bool IStruct...
...

关于PowerShell 理解 Get-Member,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com