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

马特·旺查普(Matt Wanchap)

为什么在Powershell中System.DayOfWeek可以将枚举称为like [System.DayOfWeek],而System.Environment.SpecialFolder必须将枚举称为like [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为什么会有区别以及这种行为背后的原因。有谁知道为什么会这样吗?

mklement0

System.Environment.SpecialFolder 绝对是一种

SpecialFolder,这是嵌套的内部类型Environment,位于名字空间 System

  • C#将引用的类型作为完整类型名称引用,如引用的段落中所述;也就是说,它.不仅用于将命名空间与包含类型的名称分离,而且用于将后者与嵌套类型的名称分离。

  • 与此相反,PowerShell使用一个.NET反射方法Type.GetType()以获得在运行时类型的引用:

    • 该方法使用与语言无关的符号来标识类型,如文档主题指定完全限定的类型名中所指定PetSerAl戴帽子

    • 在这种表示法中,它是+用于将嵌套类型与其包含的类型分开的(不是.C#中的)。

也就是说,PowerShell类型文字[...])如:

[System.Environment+SpecialFolder]

实际上与在[]之间取内容System.Environment+SpecialFolder并将其作为字符串参数传递给相同Type.GetType(即,以PowerShell语法表示):

[Type]::GetType('System.Environment+SpecialFolder')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么加号运算符在Julia中是矢量化的,而不是除法运算符?

来自分类Dev

为什么在运算符重载中需要引用?

来自分类Dev

为什么+运算符在Powershell中增加空间

来自分类Dev

为什么需要使用加号运算符(Iterator <Item =&Foo> +'a)向特征添加生命周期?

来自分类Dev

没有运算符匹配给定的名称和参数类型:需要转换什么?

来自分类Dev

为什么Android Studio将某些原始Kotlin类型转换为条件/安全运算符?

来自分类Dev

为什么在 Java 中需要 new 运算符,而在 C++ 中不需要

来自分类Dev

为什么一元运算符&不需要完整的类型?

来自分类Dev

为什么某些逻辑运算符这么慢?

来自分类Dev

为什么在 IIFE 中使用 `+`(加号)或 `!`(逻辑非)运算符?

来自分类Dev

为什么在Matlab中,*标量运算符在某些情况下比*更快?

来自分类Java

Java为什么不需要运算符重载?

来自分类Dev

为什么Map的+运算符需要双括号?

来自分类Dev

为什么C ++需要运算符同义词?

来自分类Dev

为什么运算符隐藏在名称空间中?

来自分类Dev

为什么我们在C ++中需要飞船<=>运算符?

来自分类Dev

为什么在scala中创建地图不需要并允许新的运算符?

来自分类Dev

为什么我需要在 getter 方法中传播运算符?

来自分类Dev

为什么在Elixir中需要功能“捕获运算符”?

来自分类Dev

使用赋值运算符时,为什么else部分中的if-else速记需要lvalue?

来自分类Dev

为什么在scanf中不需要地址运算符?

来自分类Dev

为什么在复制分配运算符的定义中需要删除?

来自分类Dev

为什么在此电源集生成器中需要按位运算符?

来自分类Dev

为什么在F#中某些二进制运算符(例如(+),(>),(<))仅接受必须为相同类型的参数,是否有特定原因?

来自分类Dev

OCaml:为什么比较运算符是类型无关的,而算术运算符不是?

来自分类Dev

为什么Rust的运算符的类型为Output变量?

来自分类Dev

为什么“sizeof”运算符可以获取类型的大小?

来自分类Dev

需要澄清Swift中的类型转换运算符

来自分类Dev

为什么D中的char []数组没有引发Result类型的[]运算符重载?

Related 相关文章

  1. 1

    为什么加号运算符在Julia中是矢量化的,而不是除法运算符?

  2. 2

    为什么在运算符重载中需要引用?

  3. 3

    为什么+运算符在Powershell中增加空间

  4. 4

    为什么需要使用加号运算符(Iterator <Item =&Foo> +'a)向特征添加生命周期?

  5. 5

    没有运算符匹配给定的名称和参数类型:需要转换什么?

  6. 6

    为什么Android Studio将某些原始Kotlin类型转换为条件/安全运算符?

  7. 7

    为什么在 Java 中需要 new 运算符,而在 C++ 中不需要

  8. 8

    为什么一元运算符&不需要完整的类型?

  9. 9

    为什么某些逻辑运算符这么慢?

  10. 10

    为什么在 IIFE 中使用 `+`(加号)或 `!`(逻辑非)运算符?

  11. 11

    为什么在Matlab中,*标量运算符在某些情况下比*更快?

  12. 12

    Java为什么不需要运算符重载?

  13. 13

    为什么Map的+运算符需要双括号?

  14. 14

    为什么C ++需要运算符同义词?

  15. 15

    为什么运算符隐藏在名称空间中?

  16. 16

    为什么我们在C ++中需要飞船<=>运算符?

  17. 17

    为什么在scala中创建地图不需要并允许新的运算符?

  18. 18

    为什么我需要在 getter 方法中传播运算符?

  19. 19

    为什么在Elixir中需要功能“捕获运算符”?

  20. 20

    使用赋值运算符时,为什么else部分中的if-else速记需要lvalue?

  21. 21

    为什么在scanf中不需要地址运算符?

  22. 22

    为什么在复制分配运算符的定义中需要删除?

  23. 23

    为什么在此电源集生成器中需要按位运算符?

  24. 24

    为什么在F#中某些二进制运算符(例如(+),(>),(<))仅接受必须为相同类型的参数,是否有特定原因?

  25. 25

    OCaml:为什么比较运算符是类型无关的,而算术运算符不是?

  26. 26

    为什么Rust的运算符的类型为Output变量?

  27. 27

    为什么“sizeof”运算符可以获取类型的大小?

  28. 28

    需要澄清Swift中的类型转换运算符

  29. 29

    为什么D中的char []数组没有引发Result类型的[]运算符重载?

热门标签

归档