C#.Net 4.0 mscorlib是否包含只读字典?

C#.Net 4.0 mscorlib是否包含只读字典?,c#,.net,mscorlib,resharper-5.0,C#,.net,Mscorlib,Resharper 5.0,我需要一本只读字典。所有的帖子都告诉我.NET4.0中没有。因此,我创建了自己的实现 在完成这项工作后,Resharper 5.1告诉我对System.Collections.ObjectsModel.ReadOnlyDictionary的引用不明确,但代码编译时没有错误 我尝试使用此实现,但无法访问。为什么? 我编写了以下代码来测试.Net 4.0中是否存在ReadOnlyDictionary: var foo = from assembly in AppDomain.CurrentDomai

我需要一本
只读字典
。所有的帖子都告诉我.NET4.0中没有。因此,我创建了自己的实现

在完成这项工作后,Resharper 5.1告诉我对
System.Collections.ObjectsModel.ReadOnlyDictionary的引用不明确,但代码编译时没有错误

我尝试使用此实现,但无法访问。为什么?

我编写了以下代码来测试.Net 4.0中是否存在ReadOnlyDictionary

var foo = from assembly in AppDomain.CurrentDomain.GetAssemblies()
          where assembly.FullName.Contains("mscorlib")
          from type in assembly.GetTypes()
          where type.Name.StartsWith("ReadOnly")
          select type.FullName + " " + assembly.FullName;
令人惊讶的结果是:

System.Collections.ReadOnlyCollectionBase mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyCollection`1 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyDictionary`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyDictionaryHelpers mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyArrayAttribute mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryKeyCollection`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryKeyEnumerator`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryValueCollection`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryValueEnumerator`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Security.ReadOnlyPermissionSet mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Security.ReadOnlyPermissionSetEnumerator mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ArrayList+ReadOnlyList mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ArrayList+ReadOnlyArrayList mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
在.Net 4.0中有一个
ReadOnlyDictionary
。我使用dotPeek 1.1来反映这种类型,它是公共的

为什么这种类型无法访问? 如何防止Resharper 5.1中的不明确引用(7.1没有这个问题)?

是在.NET 4.5中引入的。现在.NET4.5是一个“顶级”安装,这就是为什么您在您的mscorlib版本中看到它的原因。然而,如果您的项目的目标是.NET4.0,那么VisualStudio可能在某个地方有一些引用程序集,可以告诉它哪些类型是.NET4.0中真正的类型


如果你可以将你的应用升级到目标.NET4.5,那将是最简单的修复方法。在修复R#警告方面,如果它只发生在旧版本中,您可能希望忽略它。如果这是一个开源项目,您可能需要在某处对其进行文档记录。

很抱歉,我们无法升级到.Net 4.5,因为我们使用的是Visual Studio 2010。忽略此问题不是一个选项,因为intellisense不起作用,没有intellisense进行编码会造成伤害。@Verarind:使用Visual Studio intellisense而不是R#?或者,如果你说R#7.1管用的话,就用它吧?或者,只需给类型一个不同的名称——事实上,仔细想想,您是否在
System.Collections.ObjectModel
中创建了自己的类型?这绝对是个坏主意。我们不能在没有额外费用的情况下在任何计算机上使用Resharper 7.1。我在不同的名称空间中创建了一个ReadOnlyDictionary,但它是.NET4.5中具有相同名称的直接端口。升级到4.5之后,我想删除我的类,并且不做任何更改(除了名称空间自适应),现有代码应该可以工作。我建议卸载.Net Framework 4.5,但我不确定这会导致哪些问题。也许安装了任何需要它的软件。我将重命名我的ReadOnlyDictionary。谢谢。