diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ApplicationSettingsBase.cs b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ApplicationSettingsBase.cs index ccdb2c2b572157..0e9d0301f1f925 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ApplicationSettingsBase.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ApplicationSettingsBase.cs @@ -519,7 +519,7 @@ private SettingsProperty CreateSetting(PropertyInfo propertyInfo) // level and also property level, the latter overrides the former // for a given setting. This is exactly the behavior we want. - settingsProperty.Attributes.Add(attribute.GetType(), attribute); + settingsProperty.Attributes[attribute.GetType()] = attribute; } } diff --git a/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/ApplicationSettingsBaseTests.cs b/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/ApplicationSettingsBaseTests.cs index 20a29b62154874..b1d976f24b89ca 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/ApplicationSettingsBaseTests.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/tests/System/Configuration/ApplicationSettingsBaseTests.cs @@ -96,6 +96,37 @@ public override void Initialize(string name, NameValueCollection config) } +#nullable enable + public class SettingsWithNullableAttribute : ApplicationSettingsBase + { + [ApplicationScopedSetting] + public string StringProperty + { + get + { + return (string)this[nameof(StringProperty)]; + } + set + { + this[nameof(StringProperty)] = value; + } + } + + [UserScopedSetting] + public string? NullableStringProperty + { + get + { + return (string)this[nameof(NullableStringProperty)]; + } + set + { + this[nameof(NullableStringProperty)] = value; + } + } + } +#nullable disable + private class PersistedSimpleSettings : SimpleSettings { } @@ -315,5 +346,27 @@ public void OnSettingsLoaded_QueryProperty() Assert.Equal(newStringPropertyValue, settings.StringProperty); Assert.True(loadedFired); } + + [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, "Not fixed on NetFX")] + [Fact] + public void SettingsProperty_SettingsWithNullableAttributes_Ok() + { + SettingsWithNullableAttribute settings = new SettingsWithNullableAttribute(); + + Assert.Null(settings.NullableStringProperty); + + string newValue = null; + + settings.SettingChanging += (object sender, SettingChangingEventArgs e) + => + { + newValue = (string)e.NewValue; + }; + + settings.NullableStringProperty = "test"; + + Assert.Equal("test", newValue); + Assert.Equal(newValue, settings.NullableStringProperty); + } } }