将 KeyValuePair 中的 Value 设置为默认值

Setting Value in KeyValuePair to a default value

我正在做一些事情,我需要从数据库中获取一些值并将其放入声明的 DataTable. I have this aKeyValuePair` 列表中

  List<KeyValuePair<int, int>> thisList = new List<KeyValuePair<int, int>>();

thisList 的键从 1 循环到 31(实际上是几天),而下面的循环默认将值设置为 0。 (实际上价值是某种东西的数量)

 for (int i = 1; i <= 31; i++)
            {
                thisList.Add(new KeyValuePair<int, int>(i, 0));
            }

我在其他地方使用此列表来存储 DataTable 中行的值。

虽然这对于 DataTable 中的第一行工作正常,但当添加一行时,thisList 中的值被聚合而不是被替换。我在这里使用这个循环:

DataTable table;
//columns set somewhere here... not the issue in focus
foreach(var value in aBigListOfThings)
{
   for (int i = 0; i < thisList.Count(); i++)
   {

      if (condition)
         {
                int sumtemp = 0;
                int.TryParse(someVariable.FirstOrDefault().someValue, out temp);
                temp += thisList[i].Value;
                // ====Possibly the issue  
                thisList[i] = new KeyValuePair<int, int>(unrelatedValue, sumtemp);                            
                //=====                                                                         
           }
    }

   //====  attempt the reset the value in the keyvaluepair to 0


 if (someothercondition) 
    {
         for (int i = 1; i <= 31; i++)
         {
               thisList[i] = new KeyValuePair<int, int>(i, 0);
         }
    }
}

在我添加修复以将值重置为 0 (if (someothercondition)) 之前,数据如下所示:

1  | 2  | 3  | 4  | 5  | ...... 31 <---key
------------------------------
2  | 4  | 6  | 8  | 10 | ...... n  <---value
3  | 7  | 11 | 15 | 19 | ...... n  <---value

虽然它应该看起来像这样

1  | 2  | 3  | 4  | 5  | ...... 31 <---key
------------------------------
2  | 4  | 6  | 8  | 10 | ...... n <---value
1  | 3  | 5  | 7  | 9  | ...... n <---value

根据我的理解和四处寻找解决方案,KeyValuePair 是不可变的,如果有的话不能添加(如 += ,但可以替换..(请纠正我,如果我'我错了)

当我使用修复程序(上面的 wayyyy)时,我得到一个索引超出范围的异常。 Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index 我的意思是 thisList[i] = new KeyValuePair<int, int>(i, 0); 正在向列表中添加更多而不是替换现有的..

...如果您仍在阅读本文..我的问题是 a) 为什么 KeyValuePair 在聚合值时被认为是不可变的? b) 我怎样才能简单地将 keyvaluepair 中的值替换为 0 而不是?或者有可能吗?

在这一点上,任何帮助都将非常有用……让我头疼了一段时间。 :|

List<T> 的起始索引是 0,而不是 1。这意味着您的最后一个循环需要如下所示:

for (int i = 0; i < 31; i++)
{
    thisList[i] = new KeyValuePair<int, int>(i, 0);
}

这将替换索引 0 到 30 中的 31 个 KeyValuePair

顺便问一下,你为什么不使用与前一个相同的方式创建循环?

为什么不直接获取并设置值呢?例如

Dictionary<string, int> list = new Dictionary<string, int>();
list["test"] = 1;
list["test"] += 1;
Console.WriteLine (list["test"]); // will print 2