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。悲しいことに、彼らはまだ修正されていないようです!!!