Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IReadOnlyCollection上的隐式/显式强制转换混淆_C#_Visual Studio_Type Conversion_.net 4.5_Readonly Collection - Fatal编程技术网

C# IReadOnlyCollection上的隐式/显式强制转换混淆

C# IReadOnlyCollection上的隐式/显式强制转换混淆,c#,visual-studio,type-conversion,.net-4.5,readonly-collection,C#,Visual Studio,Type Conversion,.net 4.5,Readonly Collection,为什么在试图将不同的集合(都实现了IReadOnlyCollection接口)转换为IReadOnlyCollection时,编译器会对它们进行不同的处理 IReadOnlyCollection<int> a = new List<int>(); // everything fine IReadOnlyCollection<int> b = new HashSet<int>(); // compiler wants me to c

为什么在试图将不同的集合(都实现了
IReadOnlyCollection
接口)转换为
IReadOnlyCollection
时,编译器会对它们进行不同的处理

IReadOnlyCollection<int> a = new List<int>();       // everything fine
IReadOnlyCollection<int> b = new HashSet<int>();    // compiler wants me to cast
IReadOnlyCollection<int> c = new Stack<int>();      // compiler wants me to cast
IReadOnlyCollection<int> d = new Queue<int>();      // compiler wants me to cast
IReadOnlyCollection<int> e = new LinkedList<int>(); // compiler wants me to cast
IReadOnlyCollection<int> f = new SortedSet<int>();  // compiler wants me to cast
IReadOnlyCollection a=new List();//一切都好吗
IReadOnlyCollection b=新哈希集();//编译器要我投
IReadOnlyCollection c=新堆栈();//编译器要我投
IReadOnlyCollection d=新队列();//编译器要我投
IReadOnlyCollection e=新建LinkedList();//编译器要我投
IREADONLYCOLLECT f=新分拣集();//编译器要我投
我正在使用.NET 4.5和VisualStudio 2015

上述情况下的编译器错误如下:

键入
队列
/
堆栈
/。。。无法隐式转换为
IReadOnlyCollection
。存在显式转换。你缺演员吗

(这不是实际文本,但我相信您不会希望我在此处复制粘贴德语文本。)

如果我做演员

IReadOnlyCollection<int> d = new Queue<int>() as IReadOnlyCollection<int>;
IReadOnlyCollection d=new Queue()作为IReadOnlyCollection;
甚至

IReadOnlyCollection<int> d = (IReadOnlyCollection<int>)new Queue<int>();
IReadOnlyCollection d=(IReadOnlyCollection)新队列();

一切都很好;它不会给我任何编译或运行时错误。

如果您以.NET 4.6或更高版本为目标,则它不会编译

在此版本中,
SortedSet
(例如)实现了
IReadOnlyCollection
(通过右键单击并选择“转到定义”进行检查)

全部名单如下:

ISet、ICollection、IEnumerable、IEnumerable、ICollection、ISerializable、IDeserializationCallback、IReadOnlyCollection

在4.5中,它仅实现:

ISet,ICollection,IEnumerable,ICollection,IEnumerable,ISerializable,IDeserializationCallback


如果文件上另有说明,那么(恐怕)文档是错误的。

IReadOnlyCollection是从.NET 4.5开始就存在的。
List
是一个普通类;但例如
LinkedList
是List类的一个子类。它可能与继承问题有关,但我也想了解这个答案。我也不能复制它——也许是给我们的一个线索,你能告诉我们吗具体来说,编译器会说什么作为错误或警告?@J.Steen您知道除了.NET版本之外,还有哪些其他选项会影响编译器的行为吗?请查看以下内容: