Сохранение пользовательского объекта с помощью IsloatedStorageSettings

#windows-phone-7 #settings #isolatedstorage

#windows-phone-7 #Настройки #изолированное хранилище

Вопрос:

Я пытаюсь сохранить объект в IsolatedStorageSettings, чтобы сохранить высокие оценки для моей игры, но всякий раз, когда я пытаюсь сохранить обновленную копию объекта, C #, похоже, думает, что объект не изменился. Я попытался создать пользовательскую функцию Equals для класса HighScores, но, похоже, это не помогло.

Есть идеи, что я делаю не так?

Спасибо

 public bool AddOrUpdateValue(string Key, Object value)
{
    bool valueChanged = false;

    // If the key exists
    if (isolatedStore.Contains(Key))
    {
        // If the value has changed
        if (isolatedStore[Key] != value) //This keeps returning false
        {
            // Store the new value
            isolatedStore[Key] = value;
            valueChanged = true;
        }
    }
    // Otherwise create the key.
    else
    {
        isolatedStore.Add(Key, value);
        valueChanged = true;
    }

    return valueChanged;
}



//This is located inside the HighScores class    
public bool Equals(HighScores newHighScores)
{
    for (int i = 0; i < highScores.Length; i  )
    {
        if (!highScores[i].Name.Equals(newHighScores.GetIndex(i).Name))
        {
            return false;
        }

        if (!highScores[i].Time.Equals(newHighScores.GetIndex(i).Time))
        {
            return false;
        }
    }

    return true;
}
  

Ответ №1:

Вы не реализовали операторы равенства ‘==’ и ‘!=’, и они сравнивают ссылочное равенство, вам придется предоставить реализацию, которая соответствует вашему методу ‘Equals’

http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

Комментарии:

1. Спасибо, я реализовал == и !=. Однако это все еще не работает. Я проверил значение isolatedStore непосредственно перед запуском функции Save(), и оно содержало правильные значения. Однако эти значения не сохраняются при повторном запуске приложения. Есть еще идеи?

2. таким образом, вы можете пошагово выполнить свой код, и ‘AddOrUpdateValue’ будет работать как ожидалось?

3. Да, это так. Команда сохранения — это то, что, похоже, облажалось

4. Я считаю, что вам также необходимо переопределить GetHashCode

5. он также должен реализовать GetHashCode, но в этом случае это не повлияет, хэш-код используется для ключа, а не для значения.

Ответ №2:

Вы должны выполнить isolatedStore.Save() для фиксации изменений

Комментарии:

1. Нет, это не тот случай. Я проверил значение isolatedStore непосредственно перед запуском функции Save(), и оно содержало правильные значения. Однако эти значения не сохраняются при повторном запуске приложения. Есть еще идеи?