bir yapı nicelikleri tüm herhangi yöntemleri veya özelliklerini kullanmadan önce kesinlikle atanacak var. İki olası düzeltmeler burada vardır:
1) Açıkça parametresiz oluşturucu arayabilirsiniz:
public A(int x) : this()
{
B = x;
}
2) yerine mülkiyet alanı kullanabilirsiniz: Elbette
public A(int x)
{
b = x;
}
ikinci seçenek yalnızca mevcut haliyle çalışır - otomatik özellik kullanmak için yapı değiştirmek isterseniz ilk seçeneği kullanmak sahip .
Ancak önemlisi, artık bir değişken yapı var. Bu neredeyse her zaman çok kötü bir fikirdir. Ben şiddetle Eğer şöyle bir şey yerine kullanmak çağırıyorum: struct A
{
private readonly int b;
public A(int x)
{
b = x;
}
public int B { get { return b; } }
}
DÜZENLEME: Orijinal kod çalışmıyor neden Daha fazla ayrıntı ... C# spec bölüm 11.3.8 itibaren
: başlangıçta bu Şimdi
If the struct instance constructor doesn't specify a constructor initializer, the this
variable corresponds to an out
parameter of the struct type
kesinlikle yürütemediğinden anlamına gelir, atanmış olmayacak herhangi biri (mülkiyet belirleyiciler dahil) üye işlevi kadar yapı varlık yapısının bütün ilkler ed kesinlikle atanmıştır. Derleyici 'u bilmez veya'u bilir veya özellik belirleyicisinin başka bir alandan okumaya çalışmadığı gerçeğini dikkate almaya çalışır. Her şey kesinlikle atanmamış olan alanlardan okumaktan kaçınır.
çek bunu açıkça –