using System;
using System.Collections.Generic;
-using System.Linq;
using Microsoft.Extensions.Primitives;
namespace Microsoft.Extensions.Configuration
string parentPath)
{
IConfiguration section = parentPath == null ? _config : _config.GetSection(parentPath);
- IEnumerable<IConfigurationSection> children = section.GetChildren();
var keys = new List<string>();
- keys.AddRange(children.Select(c => c.Key));
- return keys.Concat(earlierKeys)
- .OrderBy(k => k, ConfigurationKeyComparer.Instance);
+ foreach (IConfigurationSection child in section.GetChildren())
+ {
+ keys.Add(child.Key);
+ }
+ keys.AddRange(earlierKeys);
+ keys.Sort(ConfigurationKeyComparer.Comparison);
+ return keys;
}
/// <inheritdoc />
using System;
using System.Collections.Generic;
-using System.Linq;
+using System.Diagnostics;
using System.Threading;
using Microsoft.Extensions.Primitives;
IEnumerable<string> earlierKeys,
string parentPath)
{
- string prefix = parentPath == null ? string.Empty : parentPath + ConfigurationPath.KeyDelimiter;
+ var results = new List<string>();
- return Data
- .Where(kv => kv.Key.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
- .Select(kv => Segment(kv.Key, prefix.Length))
- .Concat(earlierKeys)
- .OrderBy(k => k, ConfigurationKeyComparer.Instance);
+ if (parentPath is null)
+ {
+ foreach (KeyValuePair<string, string> kv in Data)
+ {
+ results.Add(Segment(kv.Key, 0));
+ }
+ }
+ else
+ {
+ Debug.Assert(ConfigurationPath.KeyDelimiter == ":");
+
+ foreach (KeyValuePair<string, string> kv in Data)
+ {
+ if (kv.Key.Length > parentPath.Length &&
+ kv.Key.StartsWith(parentPath, StringComparison.OrdinalIgnoreCase) &&
+ kv.Key[parentPath.Length] == ':')
+ {
+ results.Add(Segment(kv.Key, parentPath.Length + 1));
+ }
+ }
+ }
+
+ results.AddRange(earlierKeys);
+
+ results.Sort(ConfigurationKeyComparer.Comparison);
+
+ return results;
}
private static string Segment(string key, int prefixLength)