Warum werden verschiedene Auflistungen (die alle die IReadOnlyCollection
-Schnittstelle implementieren) vom Compiler unterschiedlich gehandhabt, wenn versucht wird, sie in IReadOnlyCollection
umzuwandeln?implizite/explizite Umwandlung von Umwandlungen auf 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
ich .NET 4.5 und Visual Studio 2015 mit
Der Compiler-Fehler in den oben genannten Fällen ist dies:
Typ Queue<int>
/Stack<int>
/... kann nicht implizit in IReadOnlyCollection<int>
umgewandelt werden . Eine explizite Konvertierung existiert. Vermissen Sie eine Besetzung?
(Dies ist nicht der eigentliche Text, aber ich glaube, Sie würden mich nicht wollen hier einen deutschen Text kopieren und einfügen.)
Wenn ich die Besetzung von
IReadOnlyCollection<int> d = new Queue<int>() as IReadOnlyCollection<int>;
oder sogar von
IReadOnlyCollection<int> d = (IReadOnlyCollection<int>)new Queue<int>();
alles ist gut; es gibt mir keine Kompilierungs- oder Laufzeitfehler.
IReadOnlyCollection existiert seit .NET 4.5, soweit ich weiß. – Kjara
'List' ist eine allgemeine Klasse; aber zum Beispiel 'LinkedList' ist eine Unterklasse für die List-Klasse. Vielleicht geht es um Erbschaftsangelegenheiten, aber ich möchte diese Antwort auch lernen. – pilkington
Ich kann das auch nicht reproduzieren - vielleicht als ein Hinweis auf uns, können Sie uns sagen, was der Compiler speziell als Fehler oder Warnung sagt? –