我正在尝试访问作为对象数组成员的对象,这可能吗?
我已经声明了一个名为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();
}
答案 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];
出于性能原因,我建议您使用第一个选项。