Скомпільований з VS 2012
типом проекту WP 8.0
наступний код не вдасться, якщо налагоджувач не додається.
Якось, якщо налагоджувач не приєднаний, оптимізація компілятора руйнує код всередині Crash()
- див. Коментарі в коді.
Тестували на Lumia 1520 (8.1) та Lumia 630 (8.0) .
Будь-які ідеї, чому це відбувається?
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());
}
}
6
Схоже, помилка компілятора, а не помилка Rx. Ви спробували використовувати ILSpy або .NET Reflector для дослідження сформованого ІЛ?
—
Брендон
Я б спробував використати
—
cwharris
Observable.Return<T2>(_t2);
, а не залишати це компілятору для вирішення типу. З цим може виникнути помилка. Зрозуміло, це далеко не постріл.
У мене було багато проблем з Rx на Windows Phone. Для мене він би склав, а потім кинув a,
—
Меттью Хоген
MethodNotFoundException
коли я насправді намагався викликати клас, що містить. Для мене працювало оновлення до версії випуску VS Update 2. Я досі не маю уявлення, що насправді було не так, але переконайтесь, що ви використовуєте останні оновлення щодо всього. Очевидно, наші проблеми дещо інші, але це може допомогти надати певні вказівки.
Яке питання - "якісь ідеї?" - ти просто хочеш знати, як домогтися, щоб перестати збиватися?
—
Тім Ловелл-Сміт
може бути тому, що _t1.Foo <тут відсутній тип> (і тут також);
—
akbar ali