如何访问对象数组中的对象实例
本文关键字:对象 数组 实例 何访问 访问 | 更新日期: 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);
}
EDIT:swarm
声明不正确。
如果你知道粒子的索引,你可以简单地使用:
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];
出于性能方面的原因,我建议您选择第一个选项。