类对象列表中的点列表

时间:2013-07-05 22:08:37

标签: c# list class point

以下是类定义的片段:

 public class Dinosaur
{
    public string Specie { get; set; }
    public int Age { get; set; }
    public List<System.Windows.Point> Location { get; set; }

    // Constructor
    public Dinosaur()
    {

    }
}

现在我们创建一个列表:

        public static List<Dinosaur> Dinosaurs = new List<Dinosaur>();

现在我们要创建并添加一个点列表。

 List<System.Windows.Point> Location = new List<System.Windows.Point>();

            for (int y = (int)pt.Y - 5; y <= (int)pt.Y + 5; y++)
                for (int x = (int)pt.X - 5; x <= (int)pt.X + 5; x++)
                    Location.Add (new System.Windows.Point (x, y ));

            Dinosaurs.Last().Location.AddRange(Location); 

最后一行是抛出空指针异常。这很奇怪,因为Location有121个好的值。

有什么想法吗?

顺便说一句,感谢Daniel和Tim的帮助。我肯定会在我的博客(Dinosaur-Island.com)中公开感谢你。

你们是最伟大的人!

3 个答案:

答案 0 :(得分:1)

var points =
    from d in Dinosaurs
    select d.Location;

根据您的问题,我不确定这是否是您所要求的。

编辑: 好的,我可能会在恐龙类的构造函数中设置List。然后我想在其中添加一系列点数,我会有这个代码。

IEnumerable<Point> points = getPointsFromSomewhere();
myDinosaurObject.Location.AddRange(points);

答案 1 :(得分:1)

您的列表Location不应该是静态的,因为您正在调用Last()方法。

public class Dinosaur
        {
            public string Specie { get; set; }
            public int Age { get; set; }
            public List<System.Windows.Point> Location { get; set; } // this shouldn't be static

            // Constructor
            public Dinosaur()
            {

            }
        }

    public static List<Dinosaur> Dinosaurs = new List<Dinosaur>(); // your list of dinosaurs somewhere

    List<System.Windows.Point> yourListOfPoints = new List<System.Windows.Point>(); // create a new list of points to add
    yourListOfPoints.Add(new Point { X = pixelMousePositionX, Y = oldLocation.Y }); // add some points to list
    Dinosaurs.Last().Location.AddRange(yourListOfPoints); // select last dinosaur from list and assign your list of points to it's location property

修改

在实际使用之前,您必须在构造函数中创建一个列表:

public List<System.Windows.Point> Location { get; set; }

// Constructor
public Dinosaur()
{
    Location = new List<System.Windows.Points>();
}

或替换:

Dinosaurs.Last().Location.AddRange(Location); 

使用:

Dinosaurs.Last().Location = Location; 

答案 2 :(得分:1)

假设问题是关于你对List<Point> Locations的初始化或添加,除了上述内容之外(虽然我不相信在这种情况下更可取),你可以使用collection initialiser: < / p>

List<Point> Locations = new List<Point>()
        {
            new Point(1, 2),
            new Point(3, 4),
            new Point(5, 6),
            new Point(1, 1)
        };

我会选择AddRange选项。