Das Problem hier ist kein Verlängerungsumwandlungsverfahren - es eine Iteratorblock Converting (das Verfahren yield return
. VB hat kein gleichwertiges Sprachkonstrukt - Sie müssten Ihre eigene Implementierung von IEnumerable<T>
erstellen, die die Filterung durchgeführt hat, und dann eine Instanz der Klasse von der Erweiterungsmethode zurückgeben.
Genau das ist die C# Compiler tut, aber es ist hinter den Kulissen versteckt.
Ein Punkt zu beachten, der sonst nicht offensichtlich sein könnte: IEnumerator<T>
implementiert IDisposable
, und eine foreach
Schleife verfügt über den Iterator am Ende. Dies kann sehr wichtig sein - also wenn Sie tun erstellen Sie Ihre eigene Implementierung von diesem (und ich würde empfehlen, dass Sie nicht, ehrlich gesagt) müssen Sie Dispose
auf den Iterator von source.GetEnumerator()
in Ihrer eigenen Dispose
Methode aufrufen .
Von George arbeitet 'Yield' in vb.net 10.0 (.Net 4.0)! – toddmo