#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(), и оно содержало правильные значения. Однако эти значения не сохраняются при повторном запуске приложения. Есть еще идеи?