Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reactive Extensions bug on Windows Phone

Compiled with VS 2012, with project type WP 8.0 the following code will fail if debugger is not attached.

Somehow, if debugger not attached, compiler optimizations ruins the code inside Crash() - see comments in code.

Tested on Lumia 1520 (8.1) and Lumia 630 (8.0).

Any ideas why this is occurring?

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());     } } 
like image 926
Yuriy Naydenov Avatar asked Jul 07 '14 12:07

Yuriy Naydenov


1 Answers

 _t1.Foo<type>(type); 

You are missing the type declaration. The compiler is guessing (and guessing wrong). Strictly type everything and it should run.

like image 190
Japes Avatar answered Oct 16 '22 08:10

Japes