public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection properties)
        {
            ExTraceGlobals.ProgramFlowTracer.TraceFunction <ExchangeSettingsProvider>(0L, "-->ExchangeSettingsProvider.GetPropertyValues: {0}", this);
            SettingsPropertyValueCollection settingsPropertyValueCollection = new SettingsPropertyValueCollection();
            string      key        = (string)context["SettingsKey"];
            IDictionary dictionary = (IDictionary)this.settingsStore[key];

            foreach (object obj in properties)
            {
                SettingsProperty      settingsProperty      = (SettingsProperty)obj;
                string                name                  = settingsProperty.Name;
                SettingsPropertyValue settingsPropertyValue = new SettingsPropertyValue(settingsProperty);
                if (dictionary == null || !dictionary.Contains(name))
                {
                    goto IL_114;
                }
                ExTraceGlobals.DataFlowTracer.TraceFunction <string, object, Type>(0L, "*--ExchangeSettingsProvider.GetPropertyValues: Converting and setting value: {0} = {1} as {2}", name, dictionary[name], settingsProperty.PropertyType);
                if (dictionary[name] != null || !settingsProperty.PropertyType.IsValueType)
                {
                    try
                    {
                        settingsPropertyValue.PropertyValue = Convert.ChangeType(dictionary[name], settingsProperty.PropertyType);
                        goto IL_24D;
                    }
                    catch (InvalidCastException arg)
                    {
                        ExTraceGlobals.DataFlowTracer.TraceError <InvalidCastException>(0L, "Exception in ExchangeSettingsProvider.GetPropertyValues: {0}", arg);
                        settingsPropertyValue.PropertyValue = settingsPropertyValue.Property.DefaultValue;
                        goto IL_24D;
                    }
                    goto IL_114;
                }
                settingsPropertyValue.PropertyValue = settingsPropertyValue.Property.DefaultValue;
IL_24D:
                settingsPropertyValueCollection.Add(settingsPropertyValue);
                continue;
IL_114:
                if (string.IsNullOrEmpty((string)settingsProperty.DefaultValue))
                {
                    ExTraceGlobals.DataFlowTracer.TraceFunction <string, Type>(0L, "*--ExchangeSettingsProvider.GetPropertyValues: Setting to null: {0} as {1}", name, settingsProperty.PropertyType);
                    settingsPropertyValue.PropertyValue = null;
                    goto IL_24D;
                }
                if (typeof(Enum).IsAssignableFrom(settingsProperty.PropertyType))
                {
                    ExTraceGlobals.DataFlowTracer.TraceFunction <string, object, Type>(0L, "*--ExchangeSettingsProvider.GetPropertyValues: Converting and setting enum value: {0} = {1} as {2}", name, settingsProperty.DefaultValue, settingsProperty.PropertyType);
                    settingsPropertyValue.PropertyValue = EnumValidator.Parse(settingsProperty.PropertyType, (string)settingsProperty.DefaultValue, EnumParseOptions.IgnoreCase);
                    goto IL_24D;
                }
                MethodInfo method = settingsProperty.PropertyType.GetMethod("Parse", BindingFlags.Static | BindingFlags.Public, null, new Type[]
                {
                    typeof(string)
                }, null);
                if (null != method)
                {
                    ExTraceGlobals.DataFlowTracer.TraceFunction <string, object, Type>(0L, "*--ExchangeSettingsProvider.GetPropertyValues: Parsing value: {0} = {1} as {2}", name, settingsProperty.DefaultValue, settingsProperty.PropertyType);
                    settingsPropertyValue.PropertyValue = method.Invoke(null, new object[]
                    {
                        settingsProperty.DefaultValue
                    });
                    goto IL_24D;
                }
                ExTraceGlobals.DataFlowTracer.TraceFunction <string, object, Type>(0L, "*--ExchangeSettingsProvider.GetPropertyValues: Using default value: {0} = {1} as {2}", name, settingsProperty.DefaultValue, settingsProperty.PropertyType);
                settingsPropertyValue.SerializedValue = settingsProperty.DefaultValue;
                goto IL_24D;
            }
            ExTraceGlobals.ProgramFlowTracer.TraceFunction <ExchangeSettingsProvider>(0L, "<--ExchangeSettingsProvider.GetPropertyValues: {0}", this);
            return(settingsPropertyValueCollection);
        }