public static double GetHeavyObjects(NumberRepresentive typeOfObject)
        {
            if (respository.TryGetValueSpecial(typeOfObject, out double result))
            {
                Console.WriteLine("returning from memory");
                return(result);
            }

            lock (key)
            {
                if (respository.TryGetValueSpecial(typeOfObject, out double resultAgain))
                {
                    Console.WriteLine("returning from memory");
                    return(resultAgain);
                }

                Console.WriteLine("generating new");
                double newObject;

                newObject = Math.Pow(typeOfObject.Basis, typeOfObject.Mone);

                respository[typeOfObject] = newObject;

                return(newObject);
            }
        }
        public static bool TryGetValueSpecial(this Dictionary <NumberRepresentive, double> repository, NumberRepresentive newNum, out double result)
        {
            bool flag = false;

            result = -1;
            var keys = repository.Keys;

            foreach (var key in keys)
            {
                if (key.Basis == newNum.Basis && key.Mone == newNum.Mone)
                {
                    flag   = true;
                    result = repository[key];
                    break;
                }
            }
            return(flag);
        }