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]);
...
}
提前感谢您的帮助。
这里的根本问题是您有一个值类型列表。当您使用列表的索引器从列表中获取项目时,您将获得该类型的副本。代码symbols[idx]
是该项的值。它不是表示该项的变量,正如错误消息所告诉您的那样。
您正试图更改副本的大小,这对列表中的项目没有影响。这是一个常见的错误,编译器甚至会将其视为错误。
如果真的确定你想要一个可变的值类型(提示:你不是,也不应该有;你几乎肯定只想在这里有一个class
来完全避免这个问题(,那么你需要获得项目的值,对它进行变异,然后再次设置项目:
if(symbols[idx].size == 0)
{
var symbol = symbols[idx];
symbol.size = 42;
symbols[idx] = symbol;
}
当您应该将返回类型设置为列表时,函数的返回类型为"void"。这应该允许您更改它并将其修改后返回。