public static IEnumerable <ISwitchable <T> > MakeSwitchables <T>(this IRando random, int keyCount) { if (typeof(T) == typeof(uint)) { return((IEnumerable <ISwitchable <T> >)random.ToUintEnumerator(((uint)1) << (keyCount - 1)).ToUintSwitchable(keyCount)); } if (typeof(T) == typeof(ulong)) { return((IEnumerable <ISwitchable <T> >)random.ToUlongEnumerator(((ulong)1) << (keyCount - 1)).ToUlongSwitchable(keyCount)); } if (typeof(T) == typeof(bool[])) { return((IEnumerable <ISwitchable <T> >)random.ToBoolEnumerator(0.5).Chunk(keyCount).Select(b => b.ToSwitchableBitArray())); } if (typeof(T) == typeof(int[])) { return((IEnumerable <ISwitchable <T> >)random.ToRandomEnumerator().Select(r => r.ToSwitchableIntArray(keyCount))); } throw new Exception("unhandled switchable type"); }