Почему можно struct изменить свои собственные поля?

Рассмотрим структуру Foo следующим образом:

struct Foo
{
  public float X;
  public float Y;

  public Foo(float x, float y)
  {
    this.X = x;
    this.Y = y;
  }

  public void Change(float x)
  {
    this.X = x;
  }
}

Я понимаю изменение поля в конструкторе, это совершенно логично для меня и моего понимания структур как значений, похожих на числа неизменяемые типы.

Однако, поскольку нельзя делать:

Foo bar = new Foo(1, 2);
bar.X = 5;

Почему можно использовать:

Foo bar = new Foo(1, 2);
bar.Change(5);

РЕДАКТИРОВАТЬ : Если структуры изменяемы, то почему нельзя ли их изменить в списке или вернуть из свойства?

Невозможно изменить выражение, потому что оно не является переменной

5
задан Community 23 May 2017 в 11:55
поделиться