Как я могу установить значение полей поддержки авто свойств в конструкторе структуры?

Asked
Viewd3822

19

Учитывая такую ​​структуру:

 public struct SomeStruct
{
    public SomeStruct(String stringProperty, Int32 intProperty)
    {
        this.StringProperty = stringProperty;
        this.IntProperty = intProperty;
    }

    public String StringProperty { get; set; }
    public Int32 IntProperty { get; set; }
}
 

Конечно, возникает ошибка компилятора, которая гласит: Объект 'this' нельзя использовать, пока все его поля не будут присвоены .

Есть ли способ присвоить значения поддерживающим полям или самим свойствам, или мне нужно реализовать свойства по старинке с моими собственными явными поддерживающими полями?

2 ответов

45

До C # 6 в этом сценарии нужно использовать конструктор this:

 public SomeStruct(String stringProperty, Int32 intProperty) : this()
{
    this.StringProperty = stringProperty;
    this.IntProperty = intProperty;
}
 

При этом вызывается конструктор по умолчанию и тем самым инициализируются все поля, что позволяет ссылаться на this в настраиваемом конструкторе.


Изменить: до C # 6, когда это стало законным; однако в наши дни это было бы намного лучше, чем readonly struct:

 public readonly struct SomeStruct
{
    public SomeStruct(string stringProperty, int intProperty)
    {
        this.StringProperty = stringProperty;
        this.IntProperty = intProperty;
    }

    public string StringProperty { get; }
    public int IntProperty { get; }
}