1

给定一个像这样的类:

 public class Dinosaur
{
    public string Specie { get; set; }
    public int Age { get; set; }
    public int Weight { get; set; }
    public Point Location { get; set; }

    // Constructor
    public Dinosaur()
    {

    }

像这样的列表:

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

更改列表最后一项中的值的正确方法是什么?这会引发错误(“'System.Collections.Generic.List.this[int]' 的最佳重载方法匹配有一些无效参数”):

Dinosaurs[Dinosaurs.Last()].Location.X = pixelMousePositionX;

一如既往,提前致谢!Stackoverflow 一直是这个项目的救星。

4

3 回答 3

9

Dinosaurs.Last()已经返回最后一项,因此您根本不需要索引器。

Dinosaurs.Last().Location.X = pixelMousePositionX;

现在它抛出这个错误:无法修改'DinosaurIsland.Dinosaur.Location'的返回值,因为它不是变量

这是因为它Point是一个结构而不是引用类型。所以你必须创建一个新点。

Point oldLocation = Dinosaurs.Last().Location;
Dinosaurs.Last().Location = new Point { X = pixelMousePositionX, Y = oldLocation.Y };
于 2013-07-05T19:58:04.740 回答
5

Dinosaurs.Last()返回最后一项,而不是它的索引,所以:

Dinosaurs.Last().Location.X = pixelMousePositionX;

如果你想通过索引来做,那么这个:

Dinosaurs[Dinosaurs.Count - 1].Location.X = pixelMousePositionX;
于 2013-07-05T19:57:30.453 回答
1

鉴于你这样做的方式,你必须通过它的索引来引用该项目:

Dinosaurs[Dinosaurs.Count - 1].Location.X = pixelMousePositionX;

或者直接引用对象:

Dinosaurs.Last().Location.X = pixelMousePositionX;
于 2013-07-05T20:01:47.473 回答