/// <summary>
        /// Converts the specified value object to a <see cref='System.Globalization.CultureInfo'/>
        /// object.
        /// </summary>
        public override object?ConvertFrom(ITypeDescriptorContext?context, CultureInfo?culture, object value)
        {
            // Only when GetCultureName returns culture.Name, we use CultureInfoMapper
            // (Since CultureInfoMapper will transfer Culture.DisplayName to Culture.Name).
            // Otherwise, we just keep the value unchanged.
            if (value is string text)
            {
                if (GetCultureName(CultureInfo.InvariantCulture).Equals(string.Empty))
                {
                    text = CultureInfoMapper.GetCultureInfoName((string)value);
                }

                string defaultCultureString = DefaultCultureString;
                if (culture != null && culture.Equals(CultureInfo.InvariantCulture))
                {
                    defaultCultureString = DefaultInvariantCultureString;
                }

                // Look for the default culture info.
                CultureInfo?retVal = null;
                if (string.IsNullOrEmpty(text) || string.Equals(text, defaultCultureString, StringComparison.Ordinal))
                {
                    retVal = CultureInfo.InvariantCulture;
                }

                // Now look in our set of installed cultures.
                if (retVal == null)
                {
                    foreach (CultureInfo info in GetStandardValues(context))
                    {
                        if (info != null && string.Equals(GetCultureName(info), text, StringComparison.Ordinal))
                        {
                            retVal = info;
                            break;
                        }
                    }
                }

                // Now try to create a new culture info from this value.
                if (retVal == null)
                {
                    try
                    {
                        retVal = new CultureInfo(text);
                    }
                    catch
                    {
                    }
                }

                // Finally, try to find a partial match.
                if (retVal == null)
                {
                    foreach (CultureInfo info in _values !)
                    {
                        if (info != null && GetCultureName(info).StartsWith(text, StringComparison.CurrentCulture))
                        {
                            retVal = info;
                            break;
                        }
                    }
                }

                // No good. We can't support it.
                if (retVal == null)
                {
                    throw new ArgumentException(SR.Format(SR.CultureInfoConverterInvalidCulture, (string)value), nameof(value));
                }

                return(retVal);
            }

            return(base.ConvertFrom(context, culture, value));
        }
        /// <summary>
        ///    <para>
        ///       Converts the specified value object to a <see cref='System.Globalization.CultureInfo'/>
        ///       object.
        ///    </para>
        /// </summary>
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value is string)
            {
                // Hack, Only when GetCultureName returns culture.Name, we use CultureInfoMapper
                // (Since CultureInfoMapper will transfer Culture.DisplayName to Culture.Name).
                // Otherwise, we just keep the value unchange.
                string text = (string)value;
                if (GetCultureName(CultureInfo.InvariantCulture).Equals(""))
                {
                    text = CultureInfoMapper.GetCultureInfoName((string)value);
                }
                CultureInfo retVal = null;

                CultureInfo currentUICulture = CultureInfo.CurrentUICulture;

                if (culture != null && culture.Equals(CultureInfo.InvariantCulture))
                {
                    CultureInfo.CurrentUICulture = culture;
                }

                try
                {
                    // Look for the default culture info.
                    //
                    if (text == null || text.Length == 0 || string.Compare(text, DefaultCultureString, StringComparison.Ordinal) == 0)
                    {
                        retVal = CultureInfo.InvariantCulture;
                    }

                    // Now look in our set of installed cultures.
                    //
                    if (retVal == null)
                    {
                        ICollection values = GetStandardValues(context);
                        IEnumerator e      = values.GetEnumerator();
                        while (e.MoveNext())
                        {
                            CultureInfo info = (CultureInfo)e.Current;
                            if (info != null && string.Compare(GetCultureName(info), text, StringComparison.Ordinal) == 0)
                            {
                                retVal = info;
                                break;
                            }
                        }
                    }

                    // Now try to create a new culture info from this value
                    //
                    if (retVal == null)
                    {
                        try
                        {
                            retVal = new CultureInfo(text);
                        }
                        catch { }
                    }

                    // Finally, try to find a partial match
                    //
                    if (retVal == null)
                    {
                        text = text.ToLower(CultureInfo.CurrentCulture);
                        IEnumerator e = _values.GetEnumerator();
                        while (e.MoveNext())
                        {
                            CultureInfo info = (CultureInfo)e.Current;
                            if (info != null && GetCultureName(info).ToLower(CultureInfo.CurrentCulture).StartsWith(text))
                            {
                                retVal = info;
                                break;
                            }
                        }
                    }
                }

                finally
                {
                    CultureInfo.CurrentUICulture = culture;
                }

                // No good.  We can't support it.
                //
                if (retVal == null)
                {
                    throw new ArgumentException(SR.Format(SR.CultureInfoConverterInvalidCulture, (string)value));
                }
                return(retVal);
            }

            return(base.ConvertFrom(context, culture, value));
        }
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (!(value is string))
            {
                return(base.ConvertFrom(context, culture, value));
            }
            string strA = (string)value;

            if (this.GetCultureName(CultureInfo.InvariantCulture).Equals(""))
            {
                strA = CultureInfoMapper.GetCultureInfoName((string)value);
            }
            CultureInfo invariantCulture = null;
            CultureInfo currentUICulture = Thread.CurrentThread.CurrentUICulture;

            if ((culture != null) && culture.Equals(CultureInfo.InvariantCulture))
            {
                Thread.CurrentThread.CurrentUICulture = culture;
            }
            try
            {
                if (((strA == null) || (strA.Length == 0)) || (string.Compare(strA, this.DefaultCultureString, StringComparison.Ordinal) == 0))
                {
                    invariantCulture = CultureInfo.InvariantCulture;
                }
                if (invariantCulture == null)
                {
                    IEnumerator enumerator = ((IEnumerable)this.GetStandardValues(context)).GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        CultureInfo current = (CultureInfo)enumerator.Current;
                        if ((current != null) && (string.Compare(this.GetCultureName(current), strA, StringComparison.Ordinal) == 0))
                        {
                            invariantCulture = current;
                            break;
                        }
                    }
                }
                if (invariantCulture == null)
                {
                    try
                    {
                        invariantCulture = new CultureInfo(strA);
                    }
                    catch
                    {
                    }
                }
                if (invariantCulture == null)
                {
                    strA = strA.ToLower(CultureInfo.CurrentCulture);
                    IEnumerator enumerator2 = this.values.GetEnumerator();
                    while (enumerator2.MoveNext())
                    {
                        CultureInfo info4 = (CultureInfo)enumerator2.Current;
                        if ((info4 != null) && this.GetCultureName(info4).ToLower(CultureInfo.CurrentCulture).StartsWith(strA))
                        {
                            invariantCulture = info4;
                            goto Label_0138;
                        }
                    }
                }
            }
            finally
            {
                Thread.CurrentThread.CurrentUICulture = currentUICulture;
            }
Label_0138:
            if (invariantCulture == null)
            {
                throw new ArgumentException(SR.GetString("CultureInfoConverterInvalidCulture", new object[] { (string)value }));
            }
            return(invariantCulture);
        }