将 KeyValuePair 中的 Value 设置为默认值
Setting Value in KeyValuePair to a default value
我正在做一些事情,我需要从数据库中获取一些值并将其放入声明的 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
是不可变的,如果有的话不能添加(如 +=
,但可以替换..(请纠正我,如果我'我错了)
当我使用修复程序(上面的 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
我正在做一些事情,我需要从数据库中获取一些值并将其放入声明的 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
是不可变的,如果有的话不能添加(如 +=
,但可以替换..(请纠正我,如果我'我错了)
当我使用修复程序(上面的 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