5

我需要一个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

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

为什么这种类型无法访问?我能做些什么来防止 Resharper 5.1 中的模糊引用(7.1 没有这个问题)?

4

1 回答 1

5

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

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

于 2014-06-04T15:16:58.967 回答