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

时间:2011-07-27 16:14:46

标签: c#

我正在尝试访问作为对象数组成员的对象,这可能吗?

我已经声明了一个名为Particle的结构,并初始化了一个约为40个粒子的“粒子”对象数组,现在我需要访问每个粒子,例如: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();
}

5 个答案:

答案 0 :(得分:5)

此代码无效,以:

开头
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#的旅程中已经足够早了,好的书或教程可以帮助你更多。

答案 1 :(得分:1)

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);
}

编辑swarm声明不正确。

答案 2 :(得分:0)

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

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];

并获得类型安全的好处。

答案 3 :(得分:0)

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
    }

答案 4 :(得分:0)

您可以将数组类型更改为“粒子”并使用索引(例如...

)访问它
particle[] swarm = new particle[swarm_size];
particle firstParticle = swarm[0];

或者您可以将对象转换回粒子......

particle firstParticle = (particle)swarm[0];

出于性能原因,我建议您使用第一个选项。