我需要一个 ReadOnlyDictionary. 。所有帖子都告诉我 .Net 4.0 中没有。因此,我创建了自己的实现。

完成此操作后,Resharper 5.1 告诉我有一个不明确的引用 System.Collections.ObjectsModel.ReadOnlyDictionary 但代码编译没有错误。

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

我写了下面的代码来测试是否有 ReadOnlyDictionary 在.Net 4.0中:

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

有一个 ReadOnlyDictionary 在.Net 4.0中。我使用 dotPeek 1.1 来反映这种类型,它是公共的。

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

有帮助吗?

解决方案

ReadOnlyDictionary 在 .NET 4.5 中引入。现在,.NET 4.5 是“顶级”安装,这就是您在 mscorlib 版本中看到它的原因。但是,如果您的项目面向 .NET 4.0,那么 Visual Studio 可能在某处有一些参考程序集,告诉它哪些类型是 真的 在.NET 4.0 中。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top