2013-07-05 6 views
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 был спасателем в этом проекте.

+1

Вы должны обратитесь к элементу по его индексу ... Возможно, попробуйте 'Dinosaurs [Dinosaurs.Count - 1] .Location.X = pixelMousePositionX;' или 'Dinosaurs.Last.Location.X = pixelMousePositionX;' –

+0

Сделал это изменение, и теперь он метает эта ошибка: невозможно изменить возврат va lue of 'DinosaurIsland.Dinosaur.Location', потому что это не переменная. – zetar

ответ

9

Dinosaurs.Last() возвращается уже последний пункт, поэтому вам не нужен индекс.

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

Now it's throwing this error: Cannot modify the return value of 'DinosaurIsland.Dinosaur.Location' because it is not a variable

Это потому, что Point является структурой, а не тип ссылки. Поэтому вам нужно создать новую точку.

Point oldLocation = Dinosaurs.Last().Location; 
Dinosaurs.Last().Location = new Point { X = pixelMousePositionX, Y = oldLocation.Y }; 
+0

Спасибо за быстрый ответ. Теперь он бросает эту ошибку: нельзя изменить возвращаемое значение «DinosaurIsland.Dinosaur.Location», потому что это не переменная. – zetar

+0

@zetar: Отредактировал мой ответ. –

+0

Ловить точку ошибка была действительно блестящей! СПАСИБО! – zetar

5

Dinosaurs.Last() возвращает последний элемент, а не его индекс, так что:

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

Если вы хотите сделать это с помощью индекса, то это:

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

Спасибо за быстрый ответ. Любая идея, почему она теперь выбрасывает эту ошибку: не может изменить возвращаемое значение «DinosaurIsland.Dinosaur.Location», потому что это не переменная. – zetar

1

Учитывая то, как вы делаете это, вы должны обратиться к элементу по его индексу:

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

или просто ссылаться на объект непосредственно:

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

Любая идея, почему она теперь выбрасывает эту ошибку: не удается изменить возвращаемое значение «DinosaurIsland.Dinosaur.Location», потому что это не переменная. – zetar

+0

Нам нужен еще один контекст, который поможет определить ошибку. –

Смежные вопросы