将KeyValuePair中的值设置为默认值

时间:2015-10-18 09:03:36

标签: c# model-view-controller keyvaluepair

我正在处理某些事情,我需要从数据库中获取一些值并将其声明为DataTable. I have this a KeyValuePair`列表

  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是不可变的,如果有任何不能添加的内容(例如+=中,但可以替换..(如果我是&#39;请更正我我错了)

当我使用修复程序(上面的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而不是?或者有可能吗?

在这一点上任何帮助都会非常有用..一直在破坏我的头脑。 :|

2 个答案:

答案 0 :(得分:1)

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

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

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

顺便说一下,为什么你没有像上一个那样创建循环,这有效吗?

答案 1 :(得分:0)

为什么不接受它并设定价值?例如

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