我的目标是将一个插入新值添加到我的列值如下的列
100 * 100
150 * 150
200 * 200
200 * 200
我收到以下错误:
项目已添加。键入字典:添加'200 x 200'键:'200 x 200'
下一个代码:
SortedList sortedList = new SortedList();
foreach (ListItem listItem in ddldimension.Items)
sortedList.Add(listItem.Text, listItem.Value);
if (!sortedList.ContainsKey(CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension1")))
sortedList.Add(CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension1"), "defaultEmbedDimension1");
if (!sortedList.ContainsKey(CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension2")))
sortedList.Add(CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension2"), "defaultEmbedDimension2");
if (!sortedList.ContainsKey(CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension3")))
sortedList.Add(CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension3"), "defaultEmbedDimension3");
答案 0 :(得分:2)
来自您收到的错误消息,以及SortedList的文档:
在任何一种情况下,SortedList都不允许重复键。
因此,看起来SortedList不是您在应用程序中使用的正确结构。不幸的是,您提供的信息不足以让我提出更好的建议。
答案 1 :(得分:2)
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();
另请阅读:Dot Net Perls的C# KeyValuePair Collection Hints。
但是如果你决定禁止重复并在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