在 MonoTouch 中,当创建具有使用类型的泛型类型参数作为其值的类型的 Dictionary 的泛型类型时,AOT 编译器不会构造所需的 Dictionary 类型,从而导致 iOS 设备在尝试调用 JIT 编译器。
public class Foo<T>
{
private Dictionary<int, T> d = new Dictionary<int, T>();
...
}
var foo = new Foo<string>(); // Runtime error.
有一个变通方法(发布在 Catalysts 博客上),其中涉及显式声明程序其他地方所需的任何构造类型:
var x = new Dictionary<int, string>();
但这有点乱。有更好的解决方法吗?
此外,在我看来,所有信息在编译时都已存在,因此 AOT 编译器应该能够构造所需的类型。因此,这是一个可行的编译器功能吗(我们可能会在未来的版本中获得)?