Доступ к параметрам объекта из списка в C # - PullRequest
0 голосов
/ 29 октября 2018

Я создаю список объектов агентов, которые содержат ряд различных параметров, но я не уверен, как получить доступ к конкретному параметру (ам) всех моих объектов, используя цикл ... что я ищу сделать, это получить все позиции Point3d от всех моих агентов. Как бы я это сделал?

// Define Agent class
class Agent
{
    Point3d Pos = new Point3d();
    Vector3d Vec = new Vector3d();
    int Alignment;
    double Separation;
    double Cohesion;
    double NeighborRadius;

    public Agent(Point3d pos, Vector3d vec, int alignment, double separation, double cohesion, double neighborRadius)
    {
        Pos = pos;
        Vec = vec;
        Alignment = alignment;
        Separation = separation;
        Cohesion = cohesion;
        NeighborRadius = neighborRadius;
    }
}

protected override void SolveInstance(IGH_DataAccess DA)
{
    // Initialize Agents
    for (int i = 0; i < agents; i++)
    {
        double xPos = RandomfromDouble(0.0, boundx);
        double yPos = RandomfromDouble(0.0, boundy);
        double zPos = RandomfromDouble(0.0, boundz);

        Point3d pos = new Point3d(xPos, yPos, zPos);        // Create Agent Start Position
        Vector3d vec = new Vector3d(xPos + 1, yPos, zPos);  // Create Agent Start Vector

        Agent agent = new Agent(pos, vec, alignment, separation, cohesion, neighborRadius);
        allAgents.Add(agent);
        agentPositions.Add(pos);
    }
}

Ответы [ 3 ]

0 голосов
/ 29 октября 2018
class Agent
{
    public Point3d Pos {get; private set;}
    public Agent() 
    {
        Pos = new Point3d();
    }
    ....
}
foreach (Agent ag in allAgents)
{
    Console.WriteLine(ag.Pos); //might need to dereference a specific member like x,y, or z
}
0 голосов
/ 29 октября 2018

Вы не можете получить доступ к Point3d Pos, поскольку по умолчанию он является закрытым. Поэтому используйте модификатор публичного доступа, как показано ниже, и надеемся, что он решит проблему:

public Point3d Pos = new Point3d();
0 голосов
/ 29 октября 2018

, если вы можете изменить модификатор доступа для Pos:

class Agent
{
    public Point3d Pos = new Point3d();
    //.
    //.
    //.
}

или

class Agent
{
    public Agent()
    {
       Pos = new Point3d();
    }
    public Point3d Pos { get;private set; }
    //.
    //.
    //.
}

List<Agent> allAgents = new List<Agent>();
List<Point3d> agentPositions = new List<Point3d>();

// Initialize Agents
//.
//.
//.


agentPositions = allAgents
            .Select(agent => agent.Pos)
            .ToList();

примечание: Linq доступен из .Net Framework 3.5

...