internal static ArgumentValidation <TArg> Borrow(string paramName, TArg argValue)
        {
            if (_validationPool == null)
            {
                _validationPool = new Queue <ArgumentValidation <TArg> >();
            }

            ArgumentValidation <TArg> valObj;

            if (_validationPool.Count > 0)
            {
                valObj = _validationPool.Dequeue();
            }
            else
            {
                valObj = new ArgumentValidation <TArg>();

#if DEBUG
                ArgumentValidationCounter.AddCreationCount();
#endif
            }

            valObj.ParameterName = paramName;
            valObj.ArgumentValue = argValue;

#if DEBUG
            ArgumentValidationCounter.AddMissingCount();
#endif

            return(valObj);
        }
        void IPoolReturnable.Return()
        {
            ParameterName = null;
            ArgumentValue = default(TArg);

            _validationPool.Enqueue(this);

        #if DEBUG
            ArgumentValidationCounter.SubtractMissingCount();
        #endif
        }