如何访问对象数组中的对象实例

本文关键字:对象 数组 实例 何访问 访问 | 更新日期: 2023-09-27 18:03:37

我正试图访问一个对象数组的成员,这可能吗?

我已经声明了一个名为Particle的结构,并初始化了一个由大约40个粒子组成的"Particle"对象数组,现在我需要访问每个粒子,例如:Particle。Gbest有人能帮忙吗??

这是我的代码:

struct particle
{
    double[] position = new double[100];
    double Gbest, Lbest;
    double Pconst = 0.5;
}
object[] swarm = new object[swarm_size];
for (int i = 0; i < swarm_size; i++)
{
    swarm[i] = new particle();
}

如何访问对象数组中的对象实例

此代码以开头无效

struct particle
{
    double[] position = new double[100];
}

不能为结构中的实例变量指定变量初始值设定项。

然而,访问另一个对象或值中的数据是很容易的——如果它是可访问的。在这种情况下,您的字段是私有的,并且您没有提供任何访问方法或属性,因此如果没有更多的代码,您将无法"从外部"访问它们。

这里有一些修改后的代码:

public class Particle
{
    private readonly double[] positions = new double[100];
    // TODO: Rename these to something useful
    public double Gbest { get; private set; }
    private double Lbest;
    private double Pconst = 0.5;
    public Particle(int g)
    {
        Gbest = g; // Or whatever
    }
}

List<Particle> swarm = new List<Particle>();
for (int i = 0; i < swarmSize; i++)
{
    swarm.Add(new Particle(i));
}
double total = 0;
foreach (Particle particle in swarm)
{
    total += particle.Gbest;
}

现在,这并没有做任何特别有用的事情,因为还不清楚你想做什么——但我建议你读一本关于C#的入门书。Stack Overflow非常适合特定的问题,但我认为你在进入C#的旅程中已经足够早了,一本好书或教程会对你有更多帮助。

var swarm = new particle[swarm_size];
for (int i = 0; i < swarm_size; i++)
{
    swarm[i] = new particle();
}

要访问阵列的属性,您可以这样走:

for (int i = 0; i < swarm_size; i++)
{
     Console.WriteLine(swarm[i].Gbest);
     Console.WriteLine(swarm[i].Lbest);
}

EDITswarm声明不正确。

如果你知道粒子的索引,你可以简单地使用:

particle part = (particle)swarm[i];
// do stuff with part

如果你不知道索引,你可以迭代它们:

foreach( particle part in swam )
{
    // do stuff with part
}

或者,您可以使用Linq-to-Objects来做更复杂的事情,但我认为您需要从简单的事情开始。。。

顺便说一句,如果可以的话,将swarm声明为:

particle[] swarm = new particle[swarm_size];

并获得类型安全的好处。

struct particle
    {
        public double[] position = new double[100];
        public double Gbest, Lbest;
        public double Pconst = 0.5;
    }
     particle[] swarm = new particle[swarm_size];
         for (int i = 0; i < swarm_size; i++)
           {
            swarm[i] = new particle();
           }
    foreach(particle p in swarm)
    {
       // do magic here
    }

您可以将数组类型更改为Particle,并使用类似。。。

particle[] swarm = new particle[swarm_size];
particle firstParticle = swarm[0];

或者你可以把物体投射回一个粒子。。。

particle firstParticle = (particle)swarm[0];

出于性能方面的原因,我建议您选择第一个选项。