Mat*_*man 8 powershell powershell-5.0
以下代码在PowerShell 4.0及更早版本中运行良好.如果我在最新的Windows 10版本的5.0.10240.16384版本上运行它,则字段不会填充在新对象($ a)中.这是一个错误还是有变化?
Add-Type @"
public struct TestUser {
public string First;
public string Last;
}
"@;
$a = New-Object TestUser -Property @{ First = "Joe"
Last = "Smith"};
Run Code Online (Sandbox Code Playgroud)
版本4.0及更早版本的结果:
$a.First -eq "Joe"
$a.Last -eq "Smith"
Run Code Online (Sandbox Code Playgroud)
5.0版
$a.First -eq $null
$a.Last -eq $null
Run Code Online (Sandbox Code Playgroud)
第5版Get-Member
TypeName: TestUser
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
First Property string First {get;set;}
Last Property string Last {get;set;}
Run Code Online (Sandbox Code Playgroud)
编辑: 我已向微软提交了一个有关此问题的错误,因为这是一个重大变化(如果它是一个更改)将影响许多现有脚本.如果该错误报告有任何更新,我将更新此问题.我仍然在寻找任何反馈,如果有人遇到过v5中可能暗示这是期望/改变行为的事情.很高兴在v5上尝试其他测试,如果有人好奇并且无法访问Win 10机器.
我已从 PowerShell 团队成员处得到证实,这是与缺少“拆箱”调用相关的错误。目前的解决方法是如果可能的话使用类而不是结构。有人提到,struct 在 PowerShell 中几乎没有什么好处,因为 PowerShell 总是会装箱一个 struct。
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |