Я делаю игру в Visual Studio 2015 UWP C#, где пользователь вводит все слова, которые они могут придумать, начиная с «Ac» в течение срока и оценивать переменные приращения с каждым словом. У меня есть коллекция словарей в моем приложении C# UWP, содержащем все слова «Ac» в словаре. Игра работает нормально, единственное, что пользователь может ввести в том же слове столько раз, сколько захочет, и оценка будет еще увеличиваться. Есть ли способ справиться с дублированием пользовательского ввода? Это мой код (за исключением около 400 слов в массиве быть кратким и исключая DispatcherTimer):Как проверить, является ли пользовательский ввод одним и тем же в словаре C#
private void btnEnter_Click(object sender, RoutedEventArgs e)
{
Dictionary<string, int> WordsWithAc = new Dictionary<string, int>();
WordsWithAc.Add("e", 1);
WordsWithAc.Add("t", 2);
WordsWithAc.Add("ed", 3);
WordsWithAc.Add("es", 4);
WordsWithAc.Add("he", 5);
WordsWithAc.Add("hy", 6);
WordsWithAc.Add("id", 7);
WordsWithAc.Add("me", 8);
WordsWithAc.Add("ne",9);
WordsWithAc.Add("re",10);
if (GlobalClassAttention.totalRecallScore >= 150)
{
btnLevel2.Visibility = Visibility.Visible;
}
if (WordsWithAc.ContainsKey(txtUserInput.Text))
{
GlobalClassAttention.totalRecallScore += 10;
txtScore.Text=GlobalClassAttention.totalRecallScore.ToString();
imgCorrectSign.Visibility = Visibility.Visible;
imgX.Visibility = Visibility.Collapsed;
WordsWithAc.Remove(txtUserInput.Text); //Doesn't remove it from the dictionary so the user can enter in the same word more than once
}
else
{
imgX.Visibility = Visibility.Visible;
imgCorrectSign.Visibility = Visibility.Collapsed;
}
}
private void btnLevel2_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(TotalRecallLevel2));
}
Изображение показывает, что введенный в пользователя «Act» дважды и оценка все еще увеличиваются, пользователь не должен иметь возможность вводить двойные слова.
Я попытался использовать массив вместо этого, но был направлен на использование словаря. Это ссылка на другие вещи, которые я пробовал. https://www.codeproject.com/Questions/1167927/How-to-eliminate-duplicate-user-input-within-the-b
каждый раз, когда событие называется новым словарем. поэтому удаление отменяется. Инициализировать словарь вне обработчика события. – Nkosi
Спасибо, Nkosi. Я пробовал это, но я получаю исключение каждый раз, когда я пытаюсь ввести несколько слов. Например, я могу ввести «Act», а затем, если попытаюсь войти в «Действие», я получаю следующее исключение: «Исключение типа« System.ArgumentException »произошло в mscorlib.ni.dll, но не было обработано в коде пользователя Дополнительная информация: Элемент с тем же ключом уже добавлен. Ключ: e. " Обычно, когда это исключение происходит, это означает, что у меня есть более одного экземпляра «e», объявленного в ictionary, но я не обманываю его более чем одним инстинктом, поэтому что-то другое вызывает это исключение. – wishfulcoder
. Исключение только начиналось, когда я объявлял словарь за пределами кнопки. Кроме того, я могу только объявить словарь за пределами кнопки, а «.adds» должны находиться внутри кнопки или они «не существуют в текущем контексте». Как так:. "Словарь WordsWithAc = новый словарь (); частная пустота btnEnter_Click (объект отправителя, RoutedEventArgs е) { WordsWithAc.Add (" е», 1); –
wishfulcoder