我正在编写一个在部分填充的列表中传递的函数。我想在此函数中设置列表中的一些字段。我认为将它作为参考传递将允许我这样做,但是,我得到以下错误:
错误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]);
...
}
提前感谢您的帮助。
答案 0 :(得分:3)
这里的根本问题是您有一个值类型列表。当您使用列表的索引器从列表中获取项目时,您将获得该类型的副本。代码symbols[idx]
是该项的值。它不是表示该项目的变量,正如错误消息告诉您的那样。
您正在尝试改变副本的大小,这对列表中的项目没有影响。这是一个常见的错误,编译器甚至会将此错误。
如果确实确定你想要一个可变的值类型(提示:你不是,你不应该有一个;你几乎肯定只想拥有一个{{ 1}}这里完全避免这个问题)然后你需要得到项目的值,改变它,然后再次设置项目:
class
答案 1 :(得分:-2)
当您应将返回类型设置为列表时,函数的返回类型为“void”。这应该允许你改变它并将其修改。