namespace WindowsFormsApplication1
{
public class Pt3DClass
{
public int x;
public int y;
public int z;
public Pt3DClass(int ix = 0, int iy = 0, int iz = 0)
{
x = ix;
y = iy;
z = iz;
}
}
public struct Pt3DStruct
{
public int x;
public int y;
public int z;
public Pt3DStruct(int ix = 0, int iy = 0, int iz = 0)
{
x = ix;
y = iy;
z = iz;
}
}
public partial class Form1 : Form
{
public Form1()
{
Pt3DClass ptc = new Pt3DClass(1,2,3);
List<Pt3DClass> lstc = new List<Pt3DClass>();
lstc.Add(ptc);
lstc[0].x = 999;
Pt3DStruct pts = new Pt3DStruct(4,5,6);
List<Pt3DStruct> lsts = new List<Pt3DStruct>();
lsts.Add(pts);
lsts[0].x = 666;
InitializeComponent();
}
}
}
在VS中编写上述代码的时候,如图下所示,会报错:无法修改List.this[int]的返回值,因为它不是变量。
仔细查看上述代码,我们可以发现存放类的List可以直接给元素内的对象赋值,但存放结构体的List无法直接给元素内的对象赋值
原因:
list[i] 是继承 IList 中的方法
object this[int index] { get; set; }
在List中使用.获取对象的时候,如果List内的元素是struct,那么它其实就是一个值传递; 如果是class,它传递的是对象的地址。值传递 它返回的是一个临时拷贝,是无法更改本身的值的,所以会报错