无法创建通用字典...有时

Posted

技术标签:

【中文标题】无法创建通用字典...有时【英文标题】:Unable to Create Generic Dictionary... Sometimes 【发布时间】:2020-04-04 00:08:57 【问题描述】:

我正在尝试在 PowerShell 中使用 C# 库,其中一个库方法需要 [System.Collections.Generic.Dictionary`2[System.String,System.String]] 类型的参数。

这应该很简单

$var = [System.Collections.Generic.Dictionary`2[System.String,System.String]]::new()

在我的 Win7 开发盒上...但是当我部署到我的 Win2012R2 服务器时,会引发以下错误:

Method invocation failed because [System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]] does not contain a method named 'new'.

老实说,我不确定这是否是 PowerShell、C#、.NET、Windows 内核或它们的某种组合的问题。我怀疑它甚至可能是隐藏一些其他错误的误报(仅在这个项目中不会是第一个这样的案例)。

【问题讨论】:

::new() 是一个较新的设施。旧版本不支持它(不确定是哪个版本在我脑海中引入了它)。您应该能够将服务器上的版本升级到支持它的版本,因为它与您的开发盒是同一代 Windows。 谢谢,@madreflection!当您说“版本”时,您是指 .NET 框架的版本还是其他版本? 好像是introduced in PowerShell 5。在 Win2012R2 服务器上安装 PowerShell 5。 成功了!再次感谢!!! 【参考方案1】:

两种解决方案:

更新 PowerShell

PowerShell 从版本 5 开始支持::new() 语法(感谢@madreflection!)

更改语法

在版本 5 之前的 PowerShell 中执行此操作的方法是:

$var = [Activator]::CreateInstance([System.Collections.Generic.Dictionary`2[System.String,System.String]])

【讨论】:

以上是关于无法创建通用字典...有时的主要内容,如果未能解决你的问题,请参考以下文章

它有时有效,但有些抛出错误:无法推断通用参数'T' - Swift

使用对象的字段作为通用字典键

ASP.NET 挂起 - 通用字典并发问题导致 GC 死锁

系统基础模块之通用字典项目管理

ASP.NET MVC 通用局部视图模式

将通用列表的元素添加到字典