getvalue()返回一个struct对象的新实例

本文关键字:新实例 实例 对象 一个 返回 getvalue struct | 更新日期: 2023-09-27 18:01:38

我有一个未知的结构类型数组。当我试图获得一些索引,我得到这个对象的一个新实例:

var inst = ((SomeStruct)((Array)arrOfSomeStruct).GetValue(0));

现在instarrOfSomeStruct[0]是不同的实例。

如果不使用[]操作符,那么最好的或者最快的方法是什么?

getvalue()返回一个struct对象的新实例

如果是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
}