static public T GetRandomValue <T>(System.Random random, IHistogram model, IEnumerable <T> whitelist) where T : Enum { int result = random.Next(model.GetTotal <T>(whitelist)); foreach (T t in whitelist) { result -= model.GetValue <T>(t); if (result < 0) { return(t); } } // Should never get here Debug.Log("Wasn't able to generate a random value for " + typeof(T).ToString() + ", returning first value"); return((T)Enum.GetValues(typeof(T)).GetValue(0)); }