SortedList
не позволяет добавлять дубликаты ключей. Вместо этого используйте List<>
(вместе с KeyValuePair
) (например, List<KeyValuePair<string, object>>
).
Вот решение для вашего кода:
var list = new List<KeyValuePair<string, string>>();
foreach (var item in ddldimension.Items)
{
list.Add(new KeyValuePair<string, string>(item.Text, item.Value));
}
var defaultEmbedDimension1 = CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension1");
int index = list.FindIndex(k => k.Key == defaultEmbedDimension1); // If there is no such Key, it will be -1. If you want to find by Value, replace k.Key by k.Value
if (index >= 0)
{
list.Add(new KeyValuePair<string, string>(defaultEmbedDimension1, "defaultEmbedDimension1"));
}
Таким образом, вы позволяете сохранить дубликаты ключей в вашей структуре. Обратите внимание, что вы вызываете один и тот же метод дважды. Вместо этого инициализируйте переменную:
string defaultEmbedDimension1 = CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension1");
Чтобы заполнить список, вы также можете использовать LINQ:
var list = ddldimensions.Items.Select(item => new KeyValuePair<string, string>(item.Text, item.Value)).ToList();
Читайте также: Советы по сбору ключей C # KeyValuePair в Dot Net Perls.
Но если вы решите запретить дубликаты и аккуратно обработать их в SortedList, вы можете создать расширение:
public static class SortedListExtensions
{
public static bool AddIfNotContains<K, V>(this IDictionary<K, V> dictionary, K key, V value)
{
if (!dictionary.ContainsKey(key))
{
dictionary.Add(key, value);
return true;
}
return false;
}
}
И используйте его, как я делал ниже, без исключения:
var sortedList = new SortedList<string, string>();
sortedList.Add("a", "b");
sortedList.AddIfNotContains("a", "b"); // Will not be added
sortedList.AddIfNotContains("b", "b"); // Will be added