public T Create()
        {
            var typeSwitcher = new TypeSwitch <InnerMap>()
                               .Case(() => new BitArreintjeFastInnerMap(width, height))
                               .Case(() => new UndefinedInnerMap(width, height));

            var createdObject = typeSwitcher.Switch(typeof(T));

            return((T)createdObject);
        }
        public IRandom Create()
        {
            var typeSwitcher = new TypeSwitch <IRandom>()
                               .Case(() => new NetRandom(seed))
                               .Case(() => new XorShiftRandom(seed));

            var createdObject = typeSwitcher.Switch(typeof(T));

            return(createdObject);
        }