Windows Phone上的无功扩展错误
编译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());
}
}
_t1.Foo<type>(type);
您缺少类型声明。 编译器正在猜测(并猜测错误)。 严格地输入所有内容并运行。
链接地址: http://www.djcxy.com/p/67317.html