我正在遍历列表并想添加多个匹配项,我应该找到它们。
到目前为止,我有,
public struct optionsSort
{
public string name;
public string date;
public double strike;
public string callPut;
public double size;
public string isin;
}
List<List<optionsSort>> stocks = new List<List<optionsSort>>();
optionsSort tempStock1 = new optionsSort();
List<optionsSort> posCheckOptions = new List<optionsSort>();
然后是一些代码,
for(int k = 0; k<posCheckOptions.Count; k++)
{
for(int l = 0; l<posCheckOptions[l].Count; l++)
{
if(posCheckOptions[l+1] == null)
{
//finished the iteration
break;
}
else if
(posCheckOptions[k][l + 1].date == posCheckOptions[k][l].date
&& posCheckOptions[k][l + 1].strike == posCheckOptions[k][l].strike
&& posCheckOptions[k][l + 1].callPut == posCheckOptions[k][l].callPut)
{
posCheckOptions[k][l].size = posCheckOptions[k][l].size
+ posCheckOptions[k][l + 1].size;
}
}
}
基本上,我从列表的开头向前看。提问时,i + 1列表中的某些元素与i相同,如果是,则将这些元素添加到i并删除整行。
我收到此错误
“错误1无法修改'System.Collections.Generic.List.this [int]'的返回值,因为它不是变量C:\ Users \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ ReadCSV.cs 890 25 WindowsFormsApplication1 “
非常感谢您的光临。
答案 0 :(得分:2)
我相信你的问题是你正在使用一个可变结构。 Mutable structs are evil.
最简单的解决方案是将optionsSort
更改为class
。这应该可以解决错误信息。
要解释错误消息,当您调用posCheckOptions[k][l]
时,由于optionsSort
是一个结构,它会返回列表中值的副本。当您更改size
时,它将更新副本,但不会更新列表中的副本。然后将丢弃该副本。编译器识别出这个并阻止你。
我建议您阅读引用类型和值类型之间的差异。