IEnumerable: Nichts zurückgeben

03/09/2007 - 17:41 von Martin Plotz | Report spam
Hallo zusammen,
ich habe in einer Klasse eine get-Property vom Typ IEnumerable<MeinTyp>.
Standardmàßig soll diese Property einfach nichts zurückgeben, d.h. wenn
ich mit foreach über das IEnumerable iteriere, soll die Schleife nicht
durchlaufen werden.
Die Kindklassen sollen dieses Verhalten überschreiben können.

Wenn ich nun aber
public IEnumerable<MeinTyp> MeinFeld
{
get{ }
}

schreibe, bekomme ich einen "Not all code paths return a value"-Fehler.

mit
public IEnumerable<MeinTyp> MeinFeld
{
get{ if (false) yield return null;}
}
kann ich das auf eine Warnung (unreachable code) reduzieren, aber das
ist nicht gerade die feine Art, auch wenn es das gewünschte Verhalten
bringt.

Wie löse ich das sauber?

Danke,
Martin
 

Lesen sie die antworten

#1 Günter Prossliner
03/09/2007 - 18:32 | Warnen spam
Hallo Martin!

ich habe in einer Klasse eine get-Property vom Typ
IEnumerable<MeinTyp>. Standardmàßig soll diese Property einfach
nichts zurückgeben, d.h. wenn ich mit foreach über das IEnumerable
iteriere, soll die Schleife nicht durchlaufen werden.



class C {
protected virutal IEnumerable<int> F {
get {yield break;}
}
}


Die Kindklassen sollen dieses Verhalten überschreiben können.



class D : C {
protected override IEnumerable<int> F {
get {yield return 1; yield return 2;}
}
}

Aufpassen musst Du eventuell bei mehr als zwei Hierachien:

class E : D {
protected override IEnumerable<int> F {
get {yield return 3; yield return 4;}
}
}

1 und 2 von "C" würden da unterschlagen werden.

Also besser ggf.:
class E : D {
protected override IEnumerable<int> F {
get {
foreach(int i in base.F) yield return i;
yield return 3; yield return 4;
}
}
}


mit
public IEnumerable<MeinTyp> MeinFeld
{
get{ if (false) yield return null;}
}
kann ich das auf eine Warnung (unreachable code) reduzieren, aber das
ist nicht gerade die feine Art, auch wenn es das gewünschte Verhalten
bringt.



Es bringt IMO nicht das gewünschte Verhalten (welches ja eine leere
Enumeration ist), da ein Enumeriert, aber das (erste und einzige)
enumerierte Element "null" ist.



OK?
mfg GP

Ähnliche fragen