getvalue()返回一个struct对象的新实例
本文关键字:新实例 实例 对象 一个 返回 getvalue struct | 更新日期: 2023-09-27 18:01:38
我有一个未知的结构类型数组。当我试图获得一些索引,我得到这个对象的一个新实例:
var inst = ((SomeStruct)((Array)arrOfSomeStruct).GetValue(0));
现在inst与arrOfSomeStruct[0]是不同的实例。
如果不使用[]操作符,那么最好的或者最快的方法是什么?如果是value type
,则无法获得原件。如果从该方法返回或传递给该方法,则将复制每个Value Type
。
你必须使用reference type(class)
这是与结构体交互的默认行为。它是复制的,而不是引用的。这对于与结构体的每次交换都是相同的,而不仅仅是您的GetValue
方法(也包括this[index]
)。
正如Jeppe Stig Nielsen评论的那样:
…对于值类型数组,
.GetValue(0)
返回对struct值盒装副本的引用。另一方面,[0]
是原始的结构体值。如果你给一个变量赋值,那么就会生成副本,如var valueCopy = arr[0];
。然而,这主要与可变值类型相关。如果结构体中有一个成员改变了该结构体的值,那么arr[0].MutateValue();
将改变原结构体的值。当然valueCopy.MutateValue();
会更改副本。
最好的选择是使结构体成为对象。移动到一个类
在某些极端情况下,使用不安全代码是最后的手段:
unsafe
{
Point p = new Point(1, 2);
Point*[] points = new Point*[] { &p };
Point* p2 = points[0];
p2->X = 2; // this changes both p and p2
}