2014-09-12 3 views
0

Я переменный ток начинающий # разработчик Я хотел бы, чтобы смоделировать уникального уровень ID -> KeyValue [String, Int]Построение словаря ID и KeyValue пары

поэтому я сделал

// Level ID -->[String][Progress] 
private Dictionary<int, KeyValuePair<string, int>> LevelProgress; 

, и я хотел бы, когда бы я добавил уровень прогресса, я хочу иметь возможность добавлять к текущему прогрессу, а если нет прогресса, добавьте новый. Проблема в том, что я не могу добавить в «текущую» пару значений ключа любое новое целое число.

public int AddProgress(int levelID, KeyValuePair<string, int> pair) 
    { 
     KeyValuePair<string, int> storedValue; 
     if (LevelProgress.TryGetValue(levelID, out storedValue)) 
     { 

     } 
     else 
     { 
      // add progress 
     } 
    } 
+1

Вы получаете сообщение об ошибке? Покажите нам, как вы пытаетесь «добавить прогресс». Вы уже не пропустили «пару»? В другом случае, когда вы добавляете прогресс, если вы добавляете это в запись, которая уже существует в словаре, у вас проблемы, так как она удовлетворила бы «если», если она существует. –

+0

Я не мог назначить новую пару ключевого знака сохраненному значению. (ошибка компилятора) – Andre

+0

«KeyValuePair » - это структура, которую вы не можете изменить. –

ответ

0

Мне непонятно, из вашего вопроса, чего вы пытаетесь достичь. Вот некоторые тесты, которые я думаю, описать то, что вы пытаетесь ...

[TestFixture] 
    class GameTests 
    { 

     [Test] 
     public void AddKeyValuePair() 
     { 
      var levelProgress = new Dictionary<int, KeyValuePair<string, int>>(); 
      KeyValuePair<string, int> storedValue; 
      if (levelProgress.TryGetValue(1, out storedValue)) 
      { 
       Assert.Fail("shouldn't get here"); 
      } 
      else 
      { 
       levelProgress[1] = new KeyValuePair<string, int>("something", 1); 
      } 

      Assert.IsTrue(levelProgress.ContainsKey(1)); 
      Assert.IsTrue(levelProgress[1].Equals(new KeyValuePair<string, int>("something", 1))); 
     } 

     [Test] 
     public void UpdateKeyValuePair() 
     { 
      var levelProgress = new Dictionary<int, KeyValuePair<string, int>> 
      { 
       {1, new KeyValuePair<string, int>("something", 1)} 
      }; 
      KeyValuePair<string, int> storedValue; 
      if (levelProgress.TryGetValue(1, out storedValue)) 
      { 
       //any operation 
       levelProgress[1] = new KeyValuePair<string, int>("newness", 100); 
      } 
      else 
      { 
       Assert.Fail("shouldn't get here"); 
      } 

      Assert.IsTrue(levelProgress.ContainsKey(1)); 
      Assert.IsTrue(levelProgress[1].Equals(new KeyValuePair<string, int>("something", 2))); 
     } 
    } 

Однако, это действительно чувствует (и кортежи/KeyValuePairs часто предполагает, что это для меня), что вы пропустили некоторые классы, которые разъясняют свое намерение ,

например. и это догадка ...

class Game 
{ 
    private Dictionary<int, LevelProgress> levelsProgress; 

    LevelProgress GetLevel(int i); 
} 

class LevelProgress 
{ 
    void AddProgress; 
} 
+0

, но я не хочу увеличивать новое значение хранимогоValue.value, я хочу сохранить новое сохраненное значение. – Andre

+0

ok, я обновил код, чтобы он заменил KeyValuePair. –

+0

это нормально сказать: levelProgress [1] = новый KeyValuePair (stored.key, stored.value); – Andre

0

Определение Progress класса с 2-мя свойствами

public class Progress 
{ 
    private string sLabel = null; 
    public string Label 
    { 
     get { return this.sLabel; } 
     set { this.sLabel = value; } 
    } 

    private int iValue = -1; 
    public int Value 
    { 
     get { return this.iValue ; } 
     set { this.iValue = value; } 
    } 

    public Progress() 
    { 

    } 

    public Progress(string Label, int Value) 
    { 
     this.sLabel = Label; 
     this.iValue = Value; 
    } 
} 

Ваш LevelProgress теперь словарь, содержащий ИНТ ключ и значение состояния

private Dictionary<int, Progress> LevelProgress; 

Добавить прогресс Как это

public int AddProgress(int levelID, Progress P) 
{ 
    if(LevelProgress.ContainsKey(levelID)) 
    { 
     LevelProgress[levelID] = P; 
    } 
    else 
    { 
     LevelProgress.Add(levelID, P); 
    } 
} 
+0

Можно ли получить уникальный ключ в классе прогресса? – Andre

+0

Что вы подразумеваете под уникальным ключом? – T00rk

+0

ok в этом классе Прогресс, метка переменная, я не хочу хранить дублированные метки ... только уникально – Andre

Смежные вопросы