如何在c#中创建一个int指针的动态数组?

Iin*_*ats -1 c#

我想要类似的东西std::vector<int*> v,但是在C#中。

我试过了List<int*> v,但是编译器说

CS0306 C#类型不能用作类型参数

我想放置int变量并通过数组更改它,例如C ++

std::vector<int*> v;
int a = 2;
v.push_back(&a);
v[0] = 4; // (a == 4) true
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 6

首先,我要非常清楚地说:使用与C ++中相同的低级指针技术来解决C#中的问题几乎总是错误的做法。通常可以使用更高级别,更安全的技术。您在这里做的事情被称为“ XY问题”,即您对解决问题有一个错误的想法,而您正在问一个有关错误想法的问题,而不是问如何解决实际问题。请编辑问题以说明真正的问题是什么。

要回答您提出的问题:要在C#中创建指针的“动态数组”,您必须创建一个“ List<IntPtr>其中与指针大小相同的整数”列表。 不要陷入相信IntPtr整数指针的陷阱。An IntPtr是一个与指针大小相同整数

然后,您可以将int*s 转换为IntPtr并将它们存储在列表中,然后在完成后再次将它们转换回去,但是同样,这几乎总是错误的做法,如果这样做,则您有责任理解一切有关.NET内存管理系统以及它是如何工作的,因为你在关闭保护内存完整性的安全系统

您是否相信您了解有关C#中内存管理工作原理的所有知识?如果不是,则不要在C#中使用指针类型。自2001年以来,我一直在C#中开发代码,并且从未在生产代码中的任何内容中使用指针类型。您不需要它们,如果您认为自己需要它们,则可能是您做错了什么。