| 

.NET C# Java Javascript Exception

2
Ich habe hier eine Collection (Raeume) die von CollectionBase<T> und diese wiederum von List<T> abgeleitet ist.

Raeume ist eine Collection für den Typ Raum.

Ich mache nun immer mal wierder LINQ Abfragen auf Raeume mit einem ToList() da es eine Collection mit Raeumen zurück geben soll.
Raeume raeumeIO = raeume.Where(r => r.TrefferQuote >= this.TrefferQuote).ToList();

Dieser Code will nicht. Fehler:

"System.Collections.Generic.List<Library.Raum>" kann nicht implizit in "Raeume" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)"


Was muss ich machen um bei einem LINQ eine Typisierte Liste zu erhalten? Also eine Collection vom Typ Raeume?
30.04.2010
GENiALi 2,5k 1 2 8
2 Antworten
1
Das ist relativ eindeutig:
Raeume ist keine List<Raum>, sondern davon abgeleitet.
raeume.Where(...).ToList() liefert eine List<Raum>, Du hast also eine typisierte Liste, aber eben keine Collection.
Du könntest in der Klasse Raeume einen Operator = schreiben, der eine List<Raum> behandelt, oder aber dort eine static void FromList(List<Raum> raumList) implementieren:
Raeume raeumeIO = Raeume.FromList(raeume.Where(r => r.TrefferQuote >= this.TrefferQuote).ToList());
// oder gleich
Raeume raeumeIO = raeume.ByTrefferQuote(this);
// und dort die Where implementieren

Btw: Was liefert der raeume.Where(...) zurück?
02.05.2010
DaSpors 4,2k 2 8
Where gibt folgendes zurück: System.Collections.Generic.List<Library.Raum>

Dann arbeite ich halt doch mit var und nehme erst dann den Raum wenn ich ihn auch wirklich brauche.
GENiALi 02.05.2010
1
Eine andere Möglichkeit wäre, die Konstruktoren entsprechend zu nutzen:

void Main()
{
var c1 = new MyCollection
{
new MyItem { ID = 1 },
new MyItem { ID = 2 },
new MyItem { ID = 3 },
new MyItem { ID = 4 },
new MyItem { ID = 5 }
};

var c2 = new MyCollection(c1.Where(item => 0 == (item.ID % 2)));

c2.Dump();
}

class MyItem
{
public int ID;
}

class MyCollection : List<MyItem>
{
public MyCollection() : base()
{
}

public MyCollection(IEnumerable<MyItem> items) : base(items)
{
}
}
05.03.2011
Daniel Kuppitz 596 1 7

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH