0

デバイスの戻るキーを押すと未処理の例外が発生しました。この問題を解決するにはどうすればよいですか?

Windows Phone 7 アプリケーションにお気に入り機能を実装しました。private void FavoriteClick(オブジェクト送信者, EventArgs e) {

            var favorites = GetFavorites();

            if (favorites.Any(m => m.key == _key))
            {
                RemoveFavorite();
                IsolatedStorageSettings.ApplicationSettings["favorites"] = favorites;
                //NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 
                return;
            }

            AddFavorite();              
    }

    private void AddFavorite()
    {
        const string messageBoxText = "Do you wish to add this page to your favorites?";
        const string caption = "Add Favorite";
        const MessageBoxButton button = MessageBoxButton.OKCancel;
        // Display message box
        var result = MessageBox.Show(messageBoxText, caption, button);

        // Process message box results
        switch (result)
        {
            case MessageBoxResult.OK:
                var favorites = GetFavorites();
                favorites.Add(_page);                   
                IsolatedStorageSettings.ApplicationSettings["favorites"] = favorites;
                break;
        }
    }

    private void RemoveFavorite()
    {
        const string messageBoxText = "Do you wish add remove this page to your favorites?";
        const string caption = "Remove Favorite";
        const MessageBoxButton button = MessageBoxButton.OKCancel;
        // Display message box
        MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button);

        // Process message box results
        switch (result)
        {
            case MessageBoxResult.OK:
                List<MobiRecord> favorites = GetFavorites();

                foreach (MobiRecord m in favorites)
                {
                    if (m.key == _key)
                    {
                        favorites.Remove(m);
                        IsolatedStorageSettings.ApplicationSettings["favorites"] = favorites;                           
                        return;
                    }
                }                    
                break;
        }
    }

問題 :

お気に入りページに移動した後、いくつかのお気に入りを追加し、追加したお気に入りを選択して、[戻る] ボタンをクリックした後、[お気に入りを削除] をクリックしてアプリケーションを自動的に閉じました (未処理の例外が発生しました)。

4

1 に答える 1

1

ここでの問題は、foreach 反復を実行しているコレクションを (お気に入りで Remove を呼び出すことによって) 変更している可能性が最も高いです。これにより、例外が発生します(ただし、本当に確実にするには例外の詳細が必要です)。

コレクションから削除するためのこのコード スニペットのように:

favorites.RemoveAll(m => m.key == _key);
于 2012-07-02T18:13:43.740 に答える