gpt4 book ai didi

c# - 列表与数组中的索引器

转载 作者:行者123 更新时间:2023-12-04 03:05:23 24 4
gpt4 key购买 nike

索引器是如何在列表和数组中定义的。
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_Itemset_Item在访问参数时像任何其他方法一样调用的方法。

数组索引器在 CLR 中有直接支持;有一个特定的 IL 指令 ldelema (加载元素地址)用于获取指向数组第 n 个元素的托管指针。然后,任何其他 IL 指令都可以使用该指针,这些指令使用指针直接更改该地址处的事物。

例如, stfld (store field value) 指令可以使用一个托管指针来指定“this”实例来存储该字段,或者您可以使用该指针直接在数组中的事物上调用方法。

在 C# 中,数组索引器返回一个变量,而列表索引器返回一个值。

关于c# - 列表与数组中的索引器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com