更改列表中某些元素的值

时间:2013-07-20 16:57:58

标签: c# list

我正在遍历列表并想添加多个匹配项,我应该找到它们。

到目前为止,我有,

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 “

非常感谢您的光临。

1 个答案:

答案 0 :(得分:2)

我相信你的问题是你正在使用一个可变结构。 Mutable structs are evil.

最简单的解决方案是将optionsSort更改为class。这应该可以解决错误信息。


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


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