为什么在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
Run Code Online (Sandbox Code Playgroud)
System.Environment.SpecialFolder绝对是一种类型,在C#中,两个枚举的工作方式相同:
Enum.GetValues(typeof(System.Environment.SpecialFolder)) // works fine
Enum.GetValues(typeof(System.DayOfWeek)) // also works
Run Code Online (Sandbox Code Playgroud)
我真的很想了解Powershell为什么会有区别,以及这种行为背后的原因。有谁知道为什么会这样吗?
System.IO.FileInfo具有Target成员.
使用Get-Item -Path * -Include 't.txt' | Get-Member显示它有一个Target成员CodeProperty.
使用GetType()显示它是一个List`1
C:>Get-Item -Path * -Include 't.txt' | ForEach-Object { $_.Target.GetType() }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True List`1 System.Object
C:>Get-Item -Path * -Include 't.txt' | % { $_.Target.GetType() | % { $_.FullName } }
System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Run Code Online (Sandbox Code Playgroud)