using System.Collections.Generic;
public enum CharacterClass
public enum CharacterTrait
private static readonly CharLookup _lookup = new CharLookup();
public static void Main()
_lookup[CharacterClass.Mage, CharacterTrait.SingingAbility, 2] = 123;
_lookup[CharacterClass.Mage, CharacterTrait.SingingAbility, 3] = 234;
_lookup[CharacterClass.Soilder, CharacterTrait.MaxBeers, 3] = 23423;
Console.WriteLine("Mage,SingingAbility,2 = " + _lookup[CharacterClass.Mage, CharacterTrait.SingingAbility, 2]);
Console.WriteLine("Soilder,MaxBeers,3 = " + _lookup[CharacterClass.Soilder, CharacterTrait.MaxBeers, 3]);
private Dictionary<Tuple<CharacterClass, CharacterTrait, int>, int> myDict = new Dictionary<Tuple<CharacterClass, CharacterTrait, int>, int>();
public int this[CharacterClass characterClass, CharacterTrait characterTrait, int level]
return Check(characterClass, characterTrait, level);
set { Add(characterClass, characterTrait, level, value); }
public void Add(CharacterClass characterClass, CharacterTrait characterTrait, int level, int value)
var key = new Tuple<CharacterClass, CharacterTrait, int>(characterClass, characterTrait, level);
if (myDict.ContainsKey(key))
public int Check(CharacterClass characterClass, CharacterTrait characterTrait, int level)
var key = new Tuple<CharacterClass, CharacterTrait, int>(characterClass, characterTrait, level);
if (myDict.TryGetValue(key, out result))
throw new ArgumentOutOfRangeException("blah");