.NET, performansı neredeyse aynı olan genel bir liste kapsayıcısı sunar (bkz. Dizilerin Performansı ve Listeler Sorusu). Ancak, başlatmada oldukça farklıdırlar.
Dizilerin varsayılan bir değerle başlatılması çok kolaydır ve tanım gereği zaten belirli bir boyuta sahiptirler:
string[] Ar = new string[10];
Bu, rastgele öğeleri güvenli bir şekilde atamanıza izin verir, örneğin:
Ar[5]="hello";
liste ile işler daha karmaşıktır. Aynı başlatmayı yapmanın iki yolunu görebiliyorum, ikisi de zarif diyeceğiniz şey değil:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
veya
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Daha temiz bir yol ne olabilir?
DÜZENLEME: Şimdiye kadar verilen cevaplar, bir listeyi önceden doldurmaktan başka bir şey olan kapasiteye atıfta bulunuyor. Örneğin, 10 kişi kapasiteli yeni oluşturulmuş bir listedeL[2]="somevalue"
DÜZENLEME 2: İnsanlar listeleri neden bu şekilde kullanmak istediğimi merak ediyorlar, çünkü amaçlanan şekilde kullanılmıyorlar. İki neden görebiliyorum:
Listelerin "yeni nesil" diziler olduğu ve neredeyse hiçbir ceza olmaksızın esneklik kattığı oldukça ikna edici bir şekilde tartışılabilir. Bu nedenle varsayılan olarak kullanılmalıdır. Başlamak kadar kolay olmayabileceklerine işaret ediyorum.
Şu anda yazdığım şey, daha büyük bir çerçevenin parçası olarak varsayılan işlevsellik sunan temel bir sınıf. Sunduğum varsayılan işlevde, Listenin boyutu gelişmiş olarak biliniyor ve bu nedenle bir dizi kullanabilirdim. Bununla birlikte, herhangi bir temel sınıfa onu dinamik olarak genişletme şansı sunmak istiyorum ve bu nedenle bir listeyi tercih ediyorum.
List
yerine geçmez Array
. Belirgin biçimde ayrı sorunları çözerler. Sabit bir boyut istiyorsanız, bir Array
. A kullanırsanız List
, Yanlış Yapıyorsunuz.