为什么在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为什么会有区别以及这种行为背后的原因。有谁知道为什么会这样吗?
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] 删除。
我来说两句