项目重复问题

发布于 2024-09-13 03:25:12 字数 1062 浏览 4 评论 0 原文

我的目标是向列添加插入新值,其中我的列值如下

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");

My goal is to add a insert new value to a column where my column values are as follows

100 * 100
150 * 150
200 * 200
200 * 200

I get the following error:

Item has already been added. Key in dictionary: '200 x 200' Key being added: '200 x 200'

For next code:

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");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

有深☉意 2024-09-20 03:25:12

从您收到的错误消息以及 的文档中排序列表

无论哪种情况,SortedList 都不允许重复的键。

因此,SortedList 似乎不是您在应用程序中使用的正确结构。不幸的是,您提供的信息不足以让我提出更好的建议。

From the error message you're getting, and from the documentation for SortedList:

In either case, a SortedList does not allow duplicate keys.

So it would appear that a SortedList isn't the right structure for you to be using in your application. Unfortunately, you've provided insufficient information to allow me to suggest something better.

七色彩虹 2024-09-20 03:25:12

SortedList 不允许添加重复的键。请改用 List<>(例如,与 KeyValuePair 一起使用)(例如 List>)。

这是您的代码的解决方案:

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 上的 C# KeyValuePair 集合提示珀尔斯。

但是,如果您决定禁止重复项并在 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

SortedList does not allow adding duplicate keys. Use List<> (along with KeyValuePair for example) instead (eg. List<KeyValuePair<string, object>>).

Here is the solution for your code:

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"));
}

In this way, you allow to keep duplicate keys in your structure. Note you invoke the same method twice. Initialize variable instead:

string defaultEmbedDimension1 = CommonUtilities.GetCustomString("DefaultValues", "defaultEmbedDimension1");

To populate list, you can alternatively use LINQ:

var list = ddldimensions.Items.Select(item => new KeyValuePair<string, string>(item.Text, item.Value)).ToList();

Read also: C# KeyValuePair Collection Hints at Dot Net Perls.

But if you decide to disallow duplicates and gently deal with them in SortedList, you can create an extension:

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;
 }
}

And use it as I did below, without throwing exception:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文