1

2週間の開発の後、私は最初にiPhoneでアプリを試しましたが、次の行でクラッシュします(シミュレーターで完全に機能します)。

私は次のコードを持っています:

private readonly Dictionary<string, QueueItem queued = new Dictionary<string, QueueItem>();

private void Processqueue()
{
    KeyValuePair<string, QueueItem> valuePair = queued.FirstOrDefault();
    // Crashes with: System.TypeInitializationException has been thrown
    // "And exception was thrown by the type initializer for PredicateOf`1"
}

private class QueueItem
{
   public string Url { get; set; }
   public Action<string> ImageLoaded { get; set; }
   public bool Pending { get; set; }
}

誰かが何をすべきか考えていることを願っています。

ありがとう

4

3 に答える 3

2

どういうわけか、AOT コンパイラはこのケースを検出できなかったので、バグ レポートを提出する必要があります。それまでの間、次のようにしてこれを回避できます。

KeyValuePair<string, QueueItem> valuePair = queued.FirstOrDefault (delegate { return true; });

これにより、まったく同じこと (実行に関して) を実行しているときに PredicateOf に到達することが回避され、自分自身をループするよりも少し短くなります。

また、元の例外が静的コンストラクターで発生したため、TypeLoadException が発生しました (これにより常に TLE が発生します。内部例外は、予期したものである必要があります)。

更新:これはバグ #300として報告され、MonoTouch (4.2+) の最近のリリースで修正されました。

于 2011-07-17T15:21:38.167 に答える
0

おそらく、辞書内の FirstOrDefault への呼び出しで PredicateOf のコンパイルが必要になることを静的コンパイラが判断できなかったためです。

于 2011-06-30T14:10:07.247 に答える