Warum nur? (Zuweisung nicht kompatibel)

13/07/2010 - 17:01 von Armin Zingler | Report spam
Hi,

Dim l1 As IList(Of IList)
Dim l2 As New List(Of List(Of Integer))

l1 = l2

Warum ist die Zuweisung nicht kompilierbar?

Fehler:
"Option Strict On" làsst keine impliziten Konvertierungen von
System.Collections.Generic.List(Of System.Collections.Generic.List(Of Integer)) in
System.Collections.Generic.IList(Of System.Collections.IList) zu.


Konkreter:
Es gibt die abstrakte Basisklasse "SetsBase". Davon abgeleitet gibt es derzeit

Public Class Sets(Of T)
Inherits SetsBase

Private liste As New List(Of List(Of T))

Public Sub RemoveAt(ByVal Index As Integer)

For Each List In liste
List.RemoveAt(Index)
Next

End Sub
end class

Da alle Nachfolger von SetsBase eine RemoveAt-Methode bekommen sollen und
diese jedes mal gleich aussehen würde, soll die Methode in der Basisklasse
SetsBase liegen. Dafür habe ich ihr das Feld

Protected _liste As IList(Of IList)

hinzugefügt, und in der abgeleiteten Klasse Sets(Of T) steht nun im Konstruktor:

_liste = liste 'FEHLER

Und nu? Welchen Typ muss _liste dann haben damit es funktioniert?


Armin
 

Lesen sie die antworten

#1 Thorsten Doerfler
13/07/2010 - 17:29 | Warnen spam
Hallo Armin,

Am 13.07.2010 17:01, schrieb Armin Zingler:


Dim l1 As IList(Of IList)
Dim l2 As New List(Of List(Of Integer))

l1 = l2

Warum ist die Zuweisung nicht kompilierbar?



Wenn DU das schon fragst, ist meine Antwort wahrscheinlich zu simpel:
Weil eine List(Of IList) etwas anderes ist, als eine List(Of Integer).

So würde es gehen:

Dim l1 As IList
Dim l2 As New List(Of List(Of Integer))

l1 = l2

Das ist dann natürlich keine generische Liste mehr.

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen