C#.Net 4.0 mscorlib包含ReadOnlyDictionary?

时间:2014-06-04 15:13:48

标签: c# .net mscorlib resharper-5.0

我需要ReadOnlyDictionary。所有帖子告诉我,.Net 4.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没有这个问题)?

1 个答案:

答案 0 :(得分:5)

ReadOnlyDictionary是在.NET 4.5中引入的。现在,.NET 4.5已经超越了顶级"安装,这就是您在mscorlib版本中看到它的原因。但是,如果您的项目是针对.NET 4.0,那么可能Visual Studio在某处有一些引用程序集,它告诉它在.NET 4.0中哪些类型真正

如果您可以将应用升级到目标.NET 4.5,那么这将是最简单的修复。在修复R#警告方面 - 如果它只发生在旧版本中,您可能只想忽略它。如果这是一个开源项目,您可能希望将其记录在某处。