索引器是如何在列表和数组中定义的。List<MyStruct> lists=new List<MyStruct>();
哪里MyStruct
是一个结构。现在考虑MyStruct[] arr=new MyStruct[10];
arr[0]
给出对第一个结构项的引用。但是 lists[0]
给我一份。
有什么理由这样做。
也因为 Int32
是结构List<Int32> list1 =new List<Int32>();
我如何访问 list1[0]
或分配 list1[0]=5
哪里不可能做 lists[0]._x=5
最佳答案
尽管它们看起来相同,但数组索引器和列表索引器在做完全不同的事情。List<T>
indexer 被声明为一个带有参数的属性:
public T this[int index] { get; set; }
这被编译为
get_Item
和 set_Item
在访问参数时像任何其他方法一样调用的方法。数组索引器在 CLR 中有直接支持;有一个特定的 IL 指令
ldelema
(加载元素地址)用于获取指向数组第 n 个元素的托管指针。然后,任何其他 IL 指令都可以使用该指针,这些指令使用指针直接更改该地址处的事物。例如,
stfld
(store field value) 指令可以使用一个托管指针来指定“this”实例来存储该字段,或者您可以使用该指针直接在数组中的事物上调用方法。在 C# 中,数组索引器返回一个变量,而列表索引器返回一个值。
关于c# - 列表与数组中的索引器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705583/