0

我正在遍历一个列表并想添加多个匹配项,如果我能找到它们。

到目前为止,我有,

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”

非常感谢您的关注。

4

1 回答 1

2

我相信您的问题是您使用的是可变结构。可变结构是邪恶的。

最简单的解决方案是更改optionsSortclass. 那应该可以修复错误消息。


为了解释错误消息,当您调用 时posCheckOptions[k][l],因为optionsSort是一个结构,它返回列表中值的副本。当您更改size时,它将更新副本,但不会更新列表中的副本。然后该副本将被丢弃。编译器认识到这一点并阻止你。


我建议您阅读引用类型和值类型之间的差异。

于 2013-07-20T17:12:27.627 回答