hojatIzadi Ответов: 1

Почему количество моих списков не уменьшается


вот некоторые из моих кодов:
Dictionary<Int32, Dictionary<Int32, List<Int32>>> Staffs = new  Dictionary<int, Dictionary<int, List<int>>>();

и:
if (!Staffs.Keys.Contains(staff))
              {
                  Staffs.Add(staff, new Dictionary<int, List<int>>());
              }

              if (!Staffs[staff].Keys.Contains(triad))
              {
                  Staffs[staff].Add(triad, new List<int>());
              }

              if (Staffs[staff][triad].Count >= 4)
              {
                  if(myVar.sitnote)
                  MessageBox.Show("Maximum notes reached");

                  return;
              }

...и...:
Персонал[работники][триада].Добавить(noteloc);
и затем:
foreach (int value in Staffs[1][1])
                       {
                           if (value == noteloc)
                           {

                               hi = true;
                               qq = value;

                           }
                       }
                       if (hi)
                           Staffs[1][1].Remove(qq);

//---------------------------------------------------------------
Я добавил 3 пункта в список внутри словаря
когда я удаляю один из них :count of the list=2
но когда я добавляю 4 элемента, после удаления элемента у меня есть: count=4
что я могу сделать?

Что я уже пробовал:

Я знаю, что проблема заключается в "возвращении" в:
если (персонал[работники][триада].Count >= 4)
{
если(аргумент myVar.sitnote)
Ящик для сообщений.Show ("максимальное количество достигнутых нот");

вернуть;
Но я не знаю, что мне делать.

1 Ответов

Рейтинг:
1

OriginalGriff

Проблема в том, что вы используете переменные в одной части кода, а "магические числа" - в другой.
Переменные:

Staffs[staff].Add(triad, new List<int>());

"Магическое число":
Staffs[1][1].Remove(qq);
Если только оба staff и triad всегда равны 1, Вы не увидите никаких изменений в счете.
Решение: никогда не используйте "магические числа"!


hojatIzadi

Привет OriginalGriff
вы сказали правду, но у меня есть эта проблема как раз тогда, когда у меня есть 4 пункта в списке .
результат для 3-х элементов (count=3) после удаления равен count=2.
результат для 2 элементов (count=2) после удаления равен count=1.
результат для 1 элемента (count=1) после удаления равен count=0.

OriginalGriff

Используйте отладчик и посмотрите, что именно у вас есть в различных словарях. Если вы не добавляете их все в правильный список (ы), то вы получите "забавные" результаты. И я не могу проверить код, который вы используете для их добавления и удаления!

hojatIzadi

Грифф пожалуйста посмотри еще несколько кодов:
Int32 персонал = 0;
Int32 триада = 0;


int h = (e. Y / 5) * 5;


если (электронная.Г &ГТ;= 100 &&усилителя; электронные.Г &ЛТ; 300)
{
персонал = 1;
noteloc = (h / 5) - 12;


}
остальное, если (электронная.Г &ГТ;= 340 &&усилителя; электронные.Г &ЛТ; 540)
{
персонал = 2;
noteloc = (h / 5) - 60;
}
остальное, если (электронная.Г &ГТ;= 580 &&усилителя; электронные.Г &ЛТ; 780)
{
персонал = 3;
noteloc = (h / 5) - 108;
}

если (электронная.Х &ГТ;= 100 &&усилителя; электронные.Х &Л; 300)
{
триада = 1;
}
остальное, если (электронная.Х &ГТ;= 300 &&усилителя; электронные.Х &л; 500)
{
триада = 2;
}
остальное, если (электронная.Х &ГТ;= 500 &&усилителя; электронные.Х &ЛТ; 700)
{
триада = 3;
}
остальное, если (электронная.Х &ГТ;= 700 &&усилителя; электронные.Х &ЛТ; 900)
{
триада = 4;
}

if (staff == 0 | / triad == 0)
{
// MessageBox.Показать ("вне зоны действия");
вернуть;
}

if (staff > 4 | / triad > 4)
{
Ящик для сообщений.Показать ("вне зоны действия");
вернуть;
}

если (! посохи. ключи.Содержит (персонал))
{
Персоналы.Добавить(персонал, новый словарь и Л;int, список<инт=""&ГТ;&ГТ;());
}

если (!Персонал[работники].Ключи.Содержит (триада))
{
Персонал[работники].Добавить(триада, новый список<инт&ГТ;());
}

если (персонал[работники][триада].Count >= 4)
{
если(аргумент myVar.sitnote)
Ящик для сообщений.Show ("максимальное количество достигнутых нот");

вернуть;
}

OriginalGriff

Используйте отладчик: проследите код до конца и посмотрите, что именно произойдет. Я не могу сказать, не запустив его, потому что большая часть этого зависит от того, что выглядит как местоположение мыши в обработчике событий! И это будет зависеть от того, какие данные вы используете - которых у меня нет. :смеяться:
Так что используйте отладчик - это совсем не сложно!

hojatIzadi

Хорошо, спасибо