2012-05-24 29 views
1

在MonoTouch中,当创建具有使用类型的泛型类型参数作为其值类型的Dictionary的泛型类型时,AOT编译器不构造所需的字典类型,当它尝试调用JIT编译器时,会导致iOS设备发生运行时错误。MonoTouch AOT编译器未构造泛型中的字典类型

public class Foo<T> 
{ 
    private Dictionary<int, T> d = new Dictionary<int, T>(); 
    ... 
} 

var foo = new Foo<string>(); // Runtime error. 

有一个变通(posted on the Catalysts blog),其涉及明确声明在其他程序中所需的任何构造类型:

var x = new Dictionary<int, string>(); 

但是,这是一个有点乱。 有更好的解决方法吗?

此外,在我看来,所有的信息都在编译时存在,所以AOT编译器应该能够构造所需的类型。这是否是一个可行的编译器功能(我们可能会在未来的版本中)?

+4

你提起这个错误? http://bugzilla.xamarin.com是你的朋友。如果你报告它,它可能会在未来的版本中修复,除非它是泛型的旋钮限制。 – Krumelur

+0

@Krumelur我猜测这可能是一个已知的限制,所以只是在一个更好的解决方法之后,但我想我也会提交一个错误报告。 – Ergwun

回答