gpt4 book ai didi

powershell - 为什么在某些Powershell类型名称中需要加号运算符?

转载 作者:行者123 更新时间:2023-12-04 01:29:48 24 4
gpt4 key购买 nike

为什么在Powershell中,System.DayOfWeek枚举可以像[System.DayOfWeek]一样被引用,而System.Environment.SpecialFolder枚举必须像[System.Environment+SpecialFolder]一样(请注意加号)呢?

我的猜测是,因为SpecialFolder是静态Environment类的一部分,而DayOfWeek直接位于System命名空间中,但是我在查找有关此的任何信息时遇到了麻烦。通常静态成员将使用“静态成员运算符”,但在这种情况下不起作用,除了神秘的加号外,我也尝试过其他任何操作...

[System.DayOfWeek] # returns enum type
[enum]::GetValues([System.DayOfWeek]) # returns enum values
[enum]::GetValues([System.Environment.SpecialFolder]) # exception: unable to find type
[enum]::GetValues([System.Environment]::SpecialFolder) # exception: value cannot be null
[enum]::GetValues([System.Environment+SpecialFolder]) # returns enum values

System.Environment.SpecialFolder绝对是一种类型,在C#中,两个枚举的工作方式相同:

Enum.GetValues(typeof(System.Environment.SpecialFolder)) // works fine
Enum.GetValues(typeof(System.DayOfWeek)) // also works

我真的很想了解Powershell为什么会有区别以及这种行为背后的原因。有人知道为什么会这样吗?

最佳答案

System.Environment.SpecialFolder is definitely a type


类型SpecialFolder 是位于 Environment 类型内的 ,位于命名空间System中:
  • C#引用引用为完整类型名称,如引用的段落中所述;也就是说,它不仅使用.将 namespace 与包含类型的名称分离,而且还将后者与嵌套类型的名称分离。
  • 相比之下, PowerShell使用.NET反射方法 Type.GetType() 来在运行时获取对该类型的引用:
  • 该方法使用与语言无关的表示法来标识类型,如文档主题Specifying fully qualified type names中所指定。
  • 在该表示法中,+用于将嵌套类型与其包含的类型分离(不是C#中的.)。


  • 也就是说,PowerShell类型文字([...])如:
    [System.Environment+SpecialFolder]
    实际上与获取[]System.Environment+SpecialFolder之间的内容,并将其作为字符串参数传递给PetSerAl相同(即,以PowerShell语法表示):
    [Type]::GetType('System.Environment+SpecialFolder')
    请注意, PowerShell为.NET的与语言无关的类型表示法提供了方便的扩展(简化),尤其是使用PowerShell的类型加速器的能力(例如Type.GetType[regex]),从 namespace 中省略[System.Text.RegularExpressions.Regex]前缀的功能(例如,用System.代替[Collections.Generic.List`1[string]]),并且在传递类型实参列表(例如[System.Collections.Generic.List`1[string]]而不是`1-请参阅 [Collections.Generic.List[string]] )时,无需指定泛型Arity(例如[Collections.Generic.List`1[string]] )以获取更多信息。

    关于powershell - 为什么在某些Powershell类型名称中需要加号运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57228424/

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