我在使用 mtouch 时遇到了奇怪的行为;我知道 AOT 在特定情况下可能会失败,但我认为这个问题有点不同。
这是一些代码:
public class TTableCell
{
}
public class TTableElement<T>
where T: TTableElement<T>
{
public void SetProperty<TV> (ref TV backingStorage, string propName, TV value)
{
backingStorage = value;
}
}
public class TAbstractTableItem<TC> : TTableElement<TAbstractTableItem<TC>>
where TC : TTableCell
{
public TAbstractTableItem ()
{
}
string _string;
bool _bool;
public void DoException ()
{
SetProperty (ref _string, "String", "Bla bla");
SetProperty (ref _bool, "Boolean", false);
}
}
现在,如果在其他地方执行以下操作:
TTableItem<TTableCell> item = new TTableItem<TTableCell> ();
item.DoException ();
我得到了例外:
Unhandled managed exception: Attempting to JIT compile method 'TouchSandbox.TTableElement`1<TouchSandbox.TAbstractTableItem`1<TouchSandbox.TTableCell>>:SetProperty<bool> (bool&,string,bool)'
现在,请注意仅针对布尔版本的 引发异常SetProperty<T>
,而不是字符串之一。在我的项目中,我使用了多种类型的方法(自定义类型),这个问题只发生在 bool 上。
有人可以帮我解决这个问题吗?
谢谢
塞尔吉奥
PS显然这个问题只存在于iDevice(不是模拟器)
更新
好的,在对 xamarin 的 bugzilla 进行了一些搜索后,我发现了一张票(实际上有点旧!),突出了 mtouch AOT 的不足:Bug 2096。可悲的是,他们似乎还没有修复!