【发布时间】:2015-09-24 13:27:42
【问题描述】:
我有一个 HashSet,我正在尝试将其转换为 IReadOnlyCollection,但出现错误:
无法将类型“System.Collections.Generic.HashSet”隐式转换为“System.Collections.Generic.IReadOnlyCollection”。存在显式转换(您是否缺少演员表?)
哈希集是一个
public class HashSet<T> : ICollection<T>, ISerializable, IDeserializationCallback, ISet<T>, IReadOnlyCollection<T>
我可以使用显式强制转换,但我不知道为什么不能将它用作 IReadOnlyCollection。
HashSet<DateTime> set = new HashSet<DateTime> { DateTime.Today };
ICollection<DateTime> collection = set; // OK
ISerializable serializable = set; // OK
IDeserializationCallback deserializationCallback = set; // OK
ISet<DateTime> iSet = set; // OK
IReadOnlyCollection<DateTime> castReadOnlyCollection = (IReadOnlyCollection<DateTime>)set; // OK
IReadOnlyCollection<DateTime> readOnlyCollection = set; // Error
为什么我不能在没有显式转换的情况下使用它?
我正在使用 .NET 框架 4.5
【问题讨论】:
-
显然它并不总是实现该接口stackoverflow.com/questions/11849861/…
-
这是 .NET 4.5 中的一个糟糕问题,由添加 IReadOnlyCollection 以支持 WinRT 语言投影和 WinRT 没有等效的集合引起。它在 4.5.1 中得到修复,只需更改项目的框架目标作为解决方法。