One method for changing one of the properties
I find there is nothing wrong with using a dictionary here. What I'm worried about are those properties:


private static int Coins { get { return resourceBox[ResourceType.Coins]; } }
private static int Diamonds { get { return resourceBox[ResourceType.Diamonds]; } }
private static int Hearts { get { return resourceBox[ResourceType.Hearts]; } }



Why do you need them? They are not only static but also private. If you cannot access them from the outside how are you going to use them? 

You didn't include the complete class definition but just a small snippet so it's hard to give you more feedback.