在以下代码中,我收到了ArgumentException
。此代码检查key
中是否设置了IsolatedStorageSetting
。如果不存在,则创建它。此时异常发生在message- value does not fall within the expected range
上。我做错了什么?
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var settings = IsolatedStorageSettings.ApplicationSettings;
if (settings.Contains("bm"))
{
string k = (string) settings["bm"];
if (k == "1")
{
cb1.IsChecked = true;
}
else
{
cb1.IsChecked = false;
}
}
else
{
cb1.IsChecked=true;
settings.Add("bm","1"); //exception occurs here
settings.Save();
}
}
答案 0 :(得分:1)
尽可能see in MSDN
时出现 ArgumentException
键已存在于词典中。
所以,我可以看到两个问题:
尝试定义一个常量字符串:
private const string BM_KEY = "bm";
并在每次访问设置时使用它。
if (settings.Contains(BM_KEY))
{
string k = (string) settings[BM_KEY];
if (k == "1")
{
cb1.IsChecked = true;
}
else
{
cb1.IsChecked = false;
}
}
else
{
cb1.IsChecked=true;
settings.Add(BM_KEY,"1"); //exception occurs here
settings.Save();
}
可以肯定的是,每次都使用相同的密钥。
答案 1 :(得分:0)
或尝试删除已存在的密钥(例如“lastBranoCalled”);)
if (IsolatedStorageSettings.ApplicationSettings.Remove("lastBranoCalled"))
IsolatedStorageSettings.ApplicationSettings.Add("lastBranoCalled", this.Panorama.SelectedIndex.ToString());
else MessageBox.Show("Error");
else IsolatedStorageSettings.ApplicationSettings.Add("lastBranoCalled", this.Panorama.SelectedIndex.ToString());