我一定错过了一些东西,觉得我必须回到基础知识但{。}}对于.Net 4.5中的ConcurrentDictionary它实现了IReadOnlyDictionary接口(虽然有些成员明确地说),但由于某种原因,我不能将实例强制转换为该接口 - 为什么会这样?
<ul>
<li style='border: 1px solid black;'>
<img src="http://i67.tinypic.com/xlcq5w.jpg"/>
<span> Marvel's Avengers Assemble - S3E1 </br> Adapting to Change</span>
</li>
</ul>
..为什么会这样?
为了使这一点更清晰:
答案 0 :(得分:7)
您可能使用.NET版本,ConcurrentDictionary未实现此接口。根据我的尝试,它不是由4.6之前的.NET版本实现的:
[SerializableAttribute]
[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true,
ExternalThreading = true)]
public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>,
IDictionary, ICollection, IEnumerable
在当前的.NET框架版本(4.6.2)中,ConcurrentDictionary实现了它:
[SerializableAttribute]
[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true,
ExternalThreading = true)]
public class ConcurrentDictionary<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>,
IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>,
IReadOnlyCollection<KeyValuePair<TKey, TValue>>
答案 1 :(得分:6)
事实证明.Net 4.6的组合是就地更新而Resharper的'导航到源'在这里欺骗了我 - .-
即使该项目的目标是4.5(.1),当导航到ConcurrentDictionary Sources(并且正在离线)时,R#会回退到'反编译'程序集 - 并且.Net 4.6将4.5与它的程序集一起替换为R#,向我提出“不正确的装配”。我错误地认为4.5(.1)已经实现了IReadOnlyCollection接口。 MEH。
那些就地.Net更新有时会让人感到困惑。
哦,好吧 - 感谢Eugene / Yacoub让我三重检查我的来源。