51 lines
1.5 KiB
C#
51 lines
1.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Microsoft.AspNet.Mvc.ModelBinding.Internal
|
|
{
|
|
public static class DictionaryHelper
|
|
{
|
|
public static IEnumerable<KeyValuePair<string, TValue>> FindKeysWithPrefix<TValue>([NotNull] IDictionary<string, TValue> dictionary,
|
|
[NotNull] string prefix)
|
|
{
|
|
TValue exactMatchValue;
|
|
if (dictionary.TryGetValue(prefix, out exactMatchValue))
|
|
{
|
|
yield return new KeyValuePair<string, TValue>(prefix, exactMatchValue);
|
|
}
|
|
|
|
foreach (var entry in dictionary)
|
|
{
|
|
var key = entry.Key;
|
|
|
|
if (key.Length <= prefix.Length)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (!key.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
// Everything is prefixed by the empty string
|
|
if (prefix.Length == 0)
|
|
{
|
|
yield return entry;
|
|
}
|
|
else
|
|
{
|
|
char charAfterPrefix = key[prefix.Length];
|
|
switch (charAfterPrefix)
|
|
{
|
|
case '[':
|
|
case '.':
|
|
yield return entry;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|