System.Globalization.CultureTableRecord.GetCultureTableRecordForRegion C# (CSharp) Method

GetCultureTableRecordForRegion() static private method

static private GetCultureTableRecordForRegion ( string regionName, bool useUserOverride ) : CultureTableRecord
regionName string
useUserOverride bool
return CultureTableRecord
        internal static CultureTableRecord GetCultureTableRecordForRegion(string regionName, bool useUserOverride)
        {
            BCLDebug.Assert(regionName != null, "[CultureTableRecord::GetCultureTableRecordForRegion] regionName should be valid.");
            
            // Make sure the cache is valid.
            if (CultureTableRecordRegionCache == null)
            {
                lock (InternalSyncObject)
                {
                    if (CultureTableRecordRegionCache == null)
                        CultureTableRecordRegionCache = new Hashtable();
                }
            }
            
            regionName = ValidateCulturePieceToLower(regionName, "regionName", MAXSIZE_FULLTAGNAME);
            
            CultureTableRecord [] cultureRecordArray = (CultureTableRecord []) CultureTableRecordRegionCache[regionName];
            if (cultureRecordArray != null)
            {
                int index = useUserOverride ? 0 : 1;
                if (cultureRecordArray[index] == null)
                {
                    cultureRecordArray[index] = cultureRecordArray[index == 0 ? 1 : 0].CloneWithUserOverride(useUserOverride);
                }
                return cultureRecordArray[index];
            }

            int dataItem = CultureTable.Default.GetDataItemFromRegionName(regionName);

            CultureTableRecord cultureRecord = null;
            
            if (dataItem > 0)
            {
                cultureRecord = new CultureTableRecord(regionName, dataItem, useUserOverride);
            }
            else
            {
                try 
                {
                    cultureRecord = GetCultureTableRecord(regionName, useUserOverride);
                } 
                catch (ArgumentException)
                {
                    throw new ArgumentException(
                                String.Format(
                                    CultureInfo.CurrentCulture,
                                    Environment.GetResourceString("Argument_InvalidRegionName"), regionName), "name");
                }
            }

            BCLDebug.Assert(cultureRecord != null, "[CultureTableRecord::GetCultureTableRecordForRegion] cultureRecord should be valid.");
            lock (InternalSyncObject)
            {
                if (CultureTableRecordRegionCache[regionName] == null)
                {
                    cultureRecordArray = new CultureTableRecord[2];
                    cultureRecordArray[useUserOverride ? 0 : 1] = cultureRecord.CloneWithUserOverride(useUserOverride);
                    CultureTableRecordRegionCache[regionName] = cultureRecordArray;
                }
            }

            return cultureRecord;
        }