试着让GzipStream穿时髦的衣服。拥有这个:
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream $output, ([IO.Compression.CompressionMode]::Optimal)获取新对象调用的错误:
新对象:找不到"GZipStream“的重载,参数计数为"2”。
但是该类的文档显示了两个接受两个参数的构造函数。
我遗漏了什么?
发布于 2019-08-30 19:08:06
“优化”是CompressionLevel枚举的成员,而不是CompressionMode枚举,因此您的代码应该是:
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream($output, [IO.Compression.CompressionLevel]::Optimal)在您的特殊情况下,PowerShell试图提供帮助,并将不存在的enum成员名转换为$null。
PS> $null -eq [IO.Compression.CompressionMode]::Optimal
True
PS> $null -eq [IO.Compression.CompressionMode]::NonExistentMember
True因此,您的原始代码相当于:
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream $output, $null这给了你和你一样的例外。错误并不在于找不到包含两个参数的构造函数重载,更重要的是它找到了多个合适的重载,无法选择使用哪一个(参见GZipStream构造函数中的前两个构造函数)。
还请注意,我必须将构造函数参数封装在圆括号中--这将改变PowerShell以某种方式解析调用哪个构造函数的方式。我不确定确切的细节,但使用圆括号可以让它工作!
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$gzipStream = New-Object System.IO.Compression.GzipStream($output, [IO.Compression.CompressionLevel]::Optimal)希望这能有所帮助。
https://stackoverflow.com/questions/57730345
复制相似问题