我需要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没有这个问题)?
答案 0 :(得分:5)
ReadOnlyDictionary
是在.NET 4.5中引入的。现在,.NET 4.5已经超越了顶级"安装,这就是您在mscorlib版本中看到它的原因。但是,如果您的项目是针对.NET 4.0,那么可能Visual Studio在某处有一些引用程序集,它告诉它在.NET 4.0中哪些类型真正。
如果您可以将应用升级到目标.NET 4.5,那么这将是最简单的修复。在修复R#警告方面 - 如果它只发生在旧版本中,您可能只想忽略它。如果这是一个开源项目,您可能希望将其记录在某处。