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编译器应该能够构造所需的类型。这是否是一个可行的编译器功能(我们可能会在未来的版本中)?
你提起这个错误? http://bugzilla.xamarin.com是你的朋友。如果你报告它,它可能会在未来的版本中修复,除非它是泛型的旋钮限制。 – Krumelur
@Krumelur我猜测这可能是一个已知的限制,所以只是在一个更好的解决方法之后,但我想我也会提交一个错误报告。 – Ergwun