В конечном счете, структуры имеют строгие правила для определенного присваивания, прежде чем их можно будет использовать как целое значение (необходимо для доступа this
);до C # 6 компилятор не рассматривал авто-свойства в конструкторах как часть определенного присваивания, поэтому доступ к вызову установщика свойств считался недействительным.Начиная с C # 6, это так (рассматривайте авто-свойства как часть определенного присваивания в конструкторах структуры), поэтому код, как показано, теперь действителен.
Поскольку он действителен (с любым недавним компилятором, дажеесли вы устанавливаете уровень языка раньше, чем C # 6), он компилируется.
Обратите внимание, однако, что этот только применяется внутри конструкторов.Следующее остается недействительным (хотя это будет работать с открытыми полями):
SomeStruct x;
x.StringProperty = "abc"; // CS0165 Use of unassigned local variable x
x.IntProperty = 123;
SomeMethod(x);