2011-07-04 39 views
6

Estoy trabajando en los Hands-On-Labs para extensiones reactivas (Rx HOL .NET.pdf) que descargué del centro de desarrollo de datos (here) hace unos días.¿Qué pasó con el operador Rx Switch()?

que añaden estas referencias para mi proyecto, utilizando NuGet:

System.Reactive 1.0.10621.0 

System.Reactive.Windows.Forms 1.0.10621.0 

Ya casi termino con los laboratorios, pero me he pegado con un obstáculo tratando de poner en práctica el ejemplo .Conecte(), Visual Studio no puede localizar el método de extensión:

'System.IObservable' no contiene una definición para 'interruptor' y ningún método de extensión 'interruptor' aceptar un primer argumento de tipo 'System.IObservable' se pudo encontrar (¿falta una directiva using o una referencia de ensamblado ?)

Ahora sé que esto laboratorios prácticos documento no está actualizado, ya que ciertas cosas han cambiado de nombre (FromEvent se convirtió en FromEventPattern) y ciertas cosas se eliminaron (RemoveTimeStamp) y este documento no refleja eso. Por mi vida, no puedo adivinar el nombre que cambiaron el nombre Switch, o averiguar en qué ensamblaje podrían haberlo movido, o encontrar una lista completa de notas de la versión que indiquen que se eliminó.

¿Alguien sabe dónde puedo encontrar Switch y cuál es su nombre actual?

+1

Gracias por proporcionar un enlace al PDF de Hand-On-Labs. –

+0

Para que lo sepas, FromEventPattern no cambia el nombre de FromEvent. FromEvent todavía está muy vivo. Aquí hay una gran explicación de la diferencia entre ellos: https://stackoverflow.com/a/19896246/540156 – onefootswill

Respuesta

8

El método de extensión Switch no se extiende IObservable<T> - se extiende IObservable<IObservable<T>>. La firma completa es:

IObservable<TSource> Switch<TSource>(this IObservable<IObservable<TSource>> sources) 

intente escribir Observable.Empty<IObservable<object>>(). y ver si Switch aparece a continuación.

Si no, verifique sus declaraciones de espacio de nombres using.

+0

Gracias. El ejemplo original era 'SelectMany' ->' TakeUntil', no noté que habían cambiado 'de x en foo de y en bar (x)' a 'de x en foo select bar (x)', después de usando la segunda forma, apareció Switch. –

+1

Sí, usualmente usas Cambiar después de seleccionar, al igual que SelectMany es realmente solo Fusionar después de un Seleccionar –