Теперь вы уже знаете, что является источником ошибки. Если конструктор не существует с перегрузкой, чтобы взять ваше свойство (в данном случае X
), вы можете использовать инициализатор объекта (который будет делать все магическое за кулисами). Не важно, чтобы ваши структуры не были неизменными, а просто предоставляли дополнительную информацию:
struct Point
{
public int X { get; set; }
public int Y { get; set; }
}
class MyClass
{
public Point Origin { get; set; }
}
MyClass c = new MyClass();
c.Origin.X = 23; //fails.
//but you could do:
c.Origin = new Point { X = 23, Y = c.Origin.Y }; //though you are invoking default constructor
//instead of
c.Origin = new Point(23, c.Origin.Y); //in case there is no constructor like this.
Это возможно, потому что это происходит за кулисами:
Point tmp = new Point();
tmp.X = 23;
tmp.Y = Origin.Y;
c.Origin = tmp;
Это выглядит как Очень странная вещь, чтобы сделать, совсем не рекомендуется. Просто перечислите альтернативный путь. Лучший способ сделать это - сделать структуру неизменной и создать соответствующий конструктор.