-1

这是一个类定义的片段:

 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)中公开感谢您。

你们是最伟大的!

4

3 回答 3

1

假设问题是关于你的初始化,或者除了List<Point> Locations上述之外(虽然我不相信在这种情况下它是可取的),你可以使用一个集合初始化器:

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

不过,我会选择这个AddRange选项。

于 2013-07-05T22:27:37.037 回答
1
var points =
    from d in Dinosaurs
    select d.Location;

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

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

IEnumerable<Point> points = getPointsFromSomewhere();
myDinosaurObject.Location.AddRange(points);
于 2013-07-05T22:11:26.367 回答
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; 
于 2013-07-05T22:20:27.550 回答