SORU
2 Ocak 2012, PAZARTESİ


Co-değişken y için x dizi dönüşüm zamanı neden olabilir durum

LinkLabels (IList<LinkLabel>) private readonly bir listesi var. Daha sonra bu liste için LinkLabels ekleyin ve aşağıdaki gibi FlowLayoutPanel bu etiketleri ekleyin

foreach(var s in strings)
{
    _list.Add(new LinkLabel{Text=s});
}

flPanel.Controls.AddRange(_list.ToArray());

Resharper bana bir uyarı gösterir: Co-variant array conversion from LinkLabel[] to Control[] can cause run-time exception on write operation.

Lütfen beni anlamaya yardımcı olur:

  1. Bu ne demektir?
  2. Bu bir kullanıcı denetimi ve kur etiketler için birden fazla nesne tarafından erişilebilir olmayacaktır böylece gibi bir kod tutmak etkilemez.

CEVAP
2 Ocak 2012, PAZARTESİ


Ne demek bu

Control[] controls = new LinkLabel[10]; // compile time legal
controls[0] = new TextBox(); // compile time legal, runtime exception

Ve daha genel anlamda

string[] array = new string[10];
object[] objs = array; // legal at compile time
objs[0] = new Foo(); // again legal, with runtime exception

C# temel tür (denetim dizisi olarak bu durumda,) bir dizi olarak nesneleri bir dizi (sizin durumunuzda, LinkLabels) başvuru için izin verilir. Ayrıca zaman yasal atamak için derlemebaşka birdizi Control bir nesne. Sorun diziaslında Kontroller bir dizi.Çalışma zamanında, hala LinkLabels bir dizi. Gibi, Atama, ya da yazmak, bir özel durum oluşturur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Floortile83

    Floortile83

    16 Ocak 2010
  • Peter Sharp

    Peter Sharp

    11 ŞUBAT 2013
  • TotalSeminarsChannel

    TotalSeminar

    16 Mart 2010