C#修改函数中的列表

本文关键字:列表 函数 修改 | 更新日期: 2023-09-27 18:00:52

我正在编写一个函数,该函数在部分填充的列表中传递。我想在这个函数中设置列表中的一些字段。我以为把它作为参考可以让我这样做,然而,我得到了以下错误:

错误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]);
        ...
    }

提前感谢您的帮助。

C#修改函数中的列表

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

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

如果真的确定你想要一个可变的值类型(提示:你不是,也不应该有;你几乎肯定只想在这里有一个class来完全避免这个问题(,那么你需要获得项目的值,对它进行变异,然后再次设置项目:

if(symbols[idx].size == 0) 
{
    var symbol = symbols[idx];
    symbol.size = 42;
    symbols[idx] = symbol;
}

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