C#修改函数中的列表

时间:2014-04-29 16:36:18

标签: c# list reference

我正在编写一个在部分填充的列表中传递的函数。我想在此函数中设置列表中的一些字段。我认为将它作为参考传递将允许我这样做,但是,我得到以下错误:

  

错误1无法修改' System.Collections.Generic.List.this [int]'的返回值。因为它不是变量

我想知道我可能需要做些什么来告诉C#我希望可以选择修改列表的内容。

以下是我的代码的摘要版本:

    public static void Determine_RTMM_Descriptor(ref List<Struct_Descriptor_Type> symbols, string Dwarf_Output_Filename)
    {
        ...
        lines = System.IO.File.ReadAllLines(Dwarf_Output_Filename);

        //loop on symbol names
        for (int idx = 0; idx < symbols.Count; idx++)
        {

            if(symbols[idx].size == 0) 
                symbols[idx].size = (int)new System.ComponentModel.Int32Converter().ConvertFromString(split_line[DwarfInterface.SIZE_INDEX]);

        ...
    }

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

这里的根本问题是您有一个值类型列表。当您使用列表的索引器从列表中获取项目时,您将获得该类型的副本。代码symbols[idx]是该项的。它不是表示该项目的变量,正如错误消息告诉您的那样。

您正在尝试改变副本的大小,这对列表中的项目没有影响。这是一个常见的错误,编译器甚至会将此错误。

如果确实确定你想要一个可变的值类型(提示:你不是,你不应该有一个;你几乎肯定只想拥有一个{{ 1}}这里完全避免这个问题)然后你需要得到项目的值,改变它,然后再次设置项目:

class

答案 1 :(得分:-2)

当您应将返回类型设置为列表时,函数的返回类型为“void”。这应该允许你改变它并将其修改。