System.Globalization.CultureTable.GetCultures C# (CSharp) Method

GetCultures() private method

private GetCultures ( CultureTypes types ) : System.Globalization.CultureInfo[]
types CultureTypes
return System.Globalization.CultureInfo[]
        unsafe internal CultureInfo [] GetCultures(CultureTypes types)
        {
            if ((int)types <= 0 ||  ((int) types & (int)CultureTypesMask) != 0)
            {
                throw new ArgumentOutOfRangeException(
                                "types",
                                String.Format(
                                    CultureInfo.CurrentCulture,
                                    Environment.GetResourceString("ArgumentOutOfRange_Range"), CultureTypes.NeutralCultures, CultureTypes.FrameworkCultures));
            }

            ArrayList cultures = new ArrayList();

            bool isAddSpecific    = ((types & CultureTypes.SpecificCultures)       != 0);
            bool isAddNeutral     = ((types & CultureTypes.NeutralCultures)        != 0);
            bool isAddInstalled   = ((types & CultureTypes.InstalledWin32Cultures) != 0);
            bool isAddUserCustom  = ((types & CultureTypes.UserCustomCulture)      != 0);
            bool isAddReplacement = ((types & CultureTypes.ReplacementCultures)    != 0);
            bool isAddFramework   = ((types & CultureTypes.FrameworkCultures)      != 0);
            bool isAddWindowsOnly = ((types & CultureTypes.WindowsOnlyCultures)    != 0);
            

            if (isAddNeutral || isAddSpecific || isAddFramework || isAddInstalled)
            {
                for (int i = 0; i < m_pCultureHeader->numCultureNames; i++) 
                {
                    int cultureID = this.m_pCultureIDIndex[i].actualCultureID;
                
                    if (CultureInfo.GetSortID(cultureID) != 0 || cultureID == CultureTableRecord.SPANISH_TRADITIONAL_SORT) 
                    {
                        //
                        // This is an alternate sort culture. For now, do nothing. 
                        // Eventually we may add a new CultureTypes flag.
                        //
                    } 
                    else
                    {
                        CultureInfo ci = new CultureInfo(cultureID);
                        CultureTypes ciTypes = ci.CultureTypes;
                        //
                        // Invariant culture (ci.Name.Length = 0) will be returned with the Neutral cultures enumeration.
                        // and will not be returned from specific cultures enumeration. 
                        //
                        
                        if (((ciTypes & CultureTypes.ReplacementCultures) == 0) &&
                            ( isAddFramework ||
                             (isAddSpecific  && ci.Name.Length>0 && ((ciTypes & CultureTypes.SpecificCultures) != 0)) ||
                             (isAddNeutral   && (((ciTypes & CultureTypes.NeutralCultures) != 0) || ci.Name.Length==0)) ||
                             (isAddInstalled && ((ciTypes & CultureTypes.InstalledWin32Cultures) != 0))))

                            cultures.Add(ci); 
                    }
                }
            }


            CultureInfo [] result = new CultureInfo[cultures.Count];
            cultures.CopyTo(result, 0);
            return (result);
        }
    } // CultureTable class 

Usage Example

 /// <include file='doc\CultureInfo.uex' path='docs/doc[@for="CultureInfo.GetCultures"]/*' />
 public static CultureInfo[] GetCultures(CultureTypes types)
 {
     return(CultureTable.GetCultures(types));
 }