private static bool TryGetCachedPrincipalData(Guid guid, out ADCachedPrincipal cacheData)
        {
            TimeSpan cacheExpiry =
                ConfigurationHelper.ParseTimeSpanOrDefault(
                    ConfigurationManager.AppSettings["ActiveDirectoryPrincipalCacheExpiry"],
                    s_defaultPrincipalCacheExpiry
                    );

            for (int i = s_cachedPrincipals.Count - 1; i >= 0; i--)
            {
                ADCachedPrincipal dataSet = s_cachedPrincipals[i];

                if (DateTime.UtcNow.Subtract(cacheExpiry) > dataSet.CacheTime)
                {
                    Log.Verbose("ADCACHE: Cache expired for {Guid}", guid);

                    dataSet.Dispose();
                    s_cachedPrincipals.RemoveAt(i);
                    continue;
                }

                if (dataSet.Principal.Guid == guid)
                {
                    Log.Verbose("ADCACHE: Cache hit for {Guid}", guid);

                    cacheData = dataSet;
                    return(true);
                }
            }

            Log.Verbose("ADCACHE: Cache miss for {Guid}", guid);

            cacheData = null;
            return(false);
        }
        private static bool TryGetCachedPrincipalData(string name, out ADCachedPrincipal cacheData)
        {
            bool     searchUpn   = name.Contains("@");
            TimeSpan cacheExpiry =
                ConfigurationHelper.ParseTimeSpanOrDefault(
                    ConfigurationManager.AppSettings["ActiveDirectoryPrincipalCacheExpiry"],
                    s_defaultPrincipalCacheExpiry
                    );

            for (int i = s_cachedPrincipals.Count - 1; i >= 0; i--)
            {
                ADCachedPrincipal dataSet = s_cachedPrincipals[i];

                if (DateTime.UtcNow.Subtract(cacheExpiry) > dataSet.CacheTime)
                {
                    Log.Verbose("ADCACHE: Cache expired for {Name}", name);

                    dataSet.Dispose();
                    s_cachedPrincipals.RemoveAt(i);
                    continue;
                }

                if (searchUpn && !string.IsNullOrEmpty(dataSet.Principal.UserPrincipalName))
                {
                    if (dataSet.Principal.UserPrincipalName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        Log.Verbose("ADCACHE: Cache hit for {UPN}", name);

                        cacheData = dataSet;
                        return(true);
                    }
                }
                else
                {
                    if (dataSet.Principal.SamAccountName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        Log.Verbose("ADCACHE: Cache hit for {SamAccountName}", name);

                        cacheData = dataSet;
                        return(true);
                    }
                }
            }

            Log.Verbose("ADCACHE: Cache miss for {Name}", name);

            cacheData = null;
            return(false);
        }