我需要一个ReadOnlyDictionary。所有帖子告诉我在.Net 4.0中没有这个类,因此我创建了自己的实现。
在这之后,Resharper 5.1提示我有一个对System.Collections.ObjectsModel.ReadOnlyDictionary的模糊引用,但代码可以编译而不出错。
我尝试使用这个实现,但无法访问。为什么?
我编写了以下代码来测试.Net 4.0中是否存在ReadOnlyDictionary:
在这之后,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没有这个问题)?
System.Collections.ObjectModel
中创建了自己的类型?那绝对是个坏主意。 - Jon Skeet