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 に答える