diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs index b82810acc71e3d..08cec0453bd211 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs @@ -38,11 +38,11 @@ public ChainedConfigurationProvider(ChainedConfigurationSource source) /// /// The key. /// When this method returns, contains the value. - /// if a value for the specified key was found, otherwise . + /// if the chained configuration has a non- value for the specified key, otherwise . public bool TryGet(string key, out string? value) { value = _config[key]; - return !string.IsNullOrEmpty(value); + return value is not null; } /// diff --git a/src/libraries/Microsoft.Extensions.Configuration/tests/ChainedConfigurationProviderTests.cs b/src/libraries/Microsoft.Extensions.Configuration/tests/ChainedConfigurationProviderTests.cs index 7fde62c4115824..805a235ad17b0e 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/tests/ChainedConfigurationProviderTests.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/tests/ChainedConfigurationProviderTests.cs @@ -153,6 +153,38 @@ public void ChainedConfiguration_ReloadingOuterConfigurationRoot_RaisesSingleOut Assert.Equal(0, innerNotifications); } + [Fact] + public void ChainedConfiguration_TryGetReturnsTrueForEmptyStringValue() + { + IConfigurationProvider provider = new ChainedConfigurationSource + { + Configuration = new ConfigurationBuilder() + .AddInMemoryCollection(new Dictionary { { "Key", string.Empty } }) + .Build(), + ShouldDisposeConfiguration = false, + } + .Build(new ConfigurationBuilder()); + + Assert.True(provider.TryGet("Key", out string? value)); + Assert.Equal(string.Empty, value); + } + + [Fact] + public void ChainedConfiguration_TryGetReturnsFalseForMissingKey() + { + IConfigurationProvider provider = new ChainedConfigurationSource + { + Configuration = new ConfigurationBuilder() + .AddInMemoryCollection(new Dictionary { { "OtherKey", "inner-value" } }) + .Build(), + ShouldDisposeConfiguration = false, + } + .Build(new ConfigurationBuilder()); + + Assert.False(provider.TryGet("MissingKey", out string? value)); + Assert.Null(value); + } + private class TestConfigurationProvider : ConfigurationProvider { public TestConfigurationProvider(string key, string value)