声明了一个struct
public struct str
{
public uint A{get;set;}
public ushort B;
public ushort C;
};然后声明了一个list
public List<str> AList = new List<str>(8192);然后想修改里面AList中最后一个元素时系统就说有问题
AList[AList.Count - 1].A = 0;说
Error:
Cannot modify the return value of 'System.Collections.Generic.List<MainClass.
str>.this[int]' because it is not avariable咋整呢?
public struct str
{
public uint A{get;set;}
public ushort B;
public ushort C;
};然后声明了一个list
public List<str> AList = new List<str>(8192);然后想修改里面AList中最后一个元素时系统就说有问题
AList[AList.Count - 1].A = 0;说
Error:
Cannot modify the return value of 'System.Collections.Generic.List<MainClass.
str>.this[int]' because it is not avariable咋整呢?
解决方案 »
- 求一正则表达式
- 不区分大小写A和HREF (?is)<A\sHREF=""([^>]+?)"">([^>]+?)</A>
- 怎么实现DataGridView和数据库绑定,实现操作数据库功能
- 讲CMD.exe中的输出 写入文档
- 怎样将htm文件或exe文件在C#编写的程序中显示出来,应该用何种控件?
- 紧急求助 System.OutOfMemoryException导致程序自动退出 其中用到remoting 和非托管
- C# TabControl SelectedIndexChanged触发问题
- C#中form切换时,form上已改变位置的控件被初始化
- 请问这个怎样成功运行?
- 文件内容搜索
- 求助,ListView如何修改绑定后的数据
- C#图片识别
{
public int Code;
public Symbol(int code)
{
Code = code;
}
} List<Symbol> s1 = new List<Symbol>();
Symbol[] s2 = new Symbol[1];
s1.Add(new Symbol(1));
s2[0] = new Symbol(2); s1[0].Color = 10; ----报错
s2[0].Color = 20; ----不报错这是为什么呢?public class Test
{
public Symbol MySymbol { get; set; }
public Symbol GetSymbol()
{
return new Symbol(10);
} Test()
{
this.symbol.Code = 10; //这也是会报错的。
GetSymbol().Code = 10;//这还是会报错。
}
}这是因为C#的return处理,如果传的是引用类型,return传递的是一个引用,如果是值类型,则return传递的是拷贝。所以对return回来的值类型做修改只是修改的一个副本,这很容易引起歧义,使你的代码达不到想要的效果。C#为了避免这个问题和C#的严谨,所以在编译时作为错误处理。
“属性”的get访问器也是要调用return的,所以属性也有这个限制。
索引和数组不同的地方在于,索引器并没有直接对应引用数据存储的地方,而数组则有。
索引器有get访问器与set访问器,用来指明要读取或写入索引器元素时,需要执行的代码。
list的[]操作实际上是索引器,所以s1[0]是执行return的,所以也有这个问题。
数组是直接取数据,所以没有这个问题。
一个是把struct改成class
第二个是用iterator来找到对应元素的引用?
用iterator是不是太耗时了,比如我需要最后一个元素。
这是值类型的特点.
你的需求就决定了这东西应该是个引用类型.