c# - Error de Extensiones reactivas en Windows Phone
.net compiler-errors (1)
Compilado con VS 2012
, con tipo de proyecto WP 8.0
el siguiente código fallará si el depurador no está conectado.
De alguna manera, si el depurador no está conectado, las optimizaciones del compilador arruinan el código dentro de Crash()
- ver comentarios en el código.
Probado en Lumia 1520 (8.1) y Lumia 630 (8.0) .
¿Alguna idea de por qué esto está ocurriendo?
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
Button.Tap += (sender, args) => new A<B, string>(new B(), "string").Crash();
}
}
public class B
{
public void Foo<T>(T val) { }
}
public class A<T1, T2> where T1 : B
{
private T1 _t1;
private T2 _t2;
public A(T1 t1, T2 t2)
{
_t2 = t2;
_t1 = t1;
}
public void Crash()
{
var obs = Observable.Return(_t2);
obs.Subscribe(result =>
{
//CLR is expecting T2 to be System.String here,
//but somehow, after passing through Observable
//T2 here is not a string, it''s A<T1, T2>
new List<T2>().Add(result);
});
//Will run normally if commented
_t1.Foo(new object());
}
}
_t1.Foo<type>(type);
Te estás perdiendo la declaración de tipo. El compilador está adivinando (y adivinando mal). Escriba estrictamente todo y debería ejecutarse.