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

  • Arun Kumar

    Arun Kumar

    18 Mart 2010
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • William Sledd

    William Sled

    24 EYLÜL 2006