wtorek, 18 marca 2008

Tworzenie tablic obiektów w C#

Moze to naleciałości z C++, ale dziwna rzeczą okazało sie dla mnie inicjalizowanie tablicy obiektóww C# null'ami. Tworząc sobie tablice:
 
class MyType{
}
MyType[] array = new MyType[10];


Okazuje sie ze wszystkie elementy array sa ustawnione na null, dzieje sie tak ponieważ podczas tworzenia tablicy w C#, podobnie jak w C++ wywoływany jest konstruktor domyslny obiektów przechowywanych, jako że array przechowuje tylko referencje do obiektow to wywolywany jest konstruktor domyslny referencji a ten ustawia ja na null. Aby tego uniknać mozna recznie napisać pętle wszedzie gdzie tworzymy tablice:

for(uint i=0; i < array,Length; i++)
         array[i] = new MyType();

Jednak lepiej jest napisac raz i spokój, ja napisałem , może komuś sie przyda.

namespace Utillity{
  class Arraytil{
    public static T[] CreateArray(uint size)
      where T : new()
   {
      T[] array = new T[size];
      for (uint i = 0; i < size; i++)
        array[i] = new T()
      return array;
   }
 }
}

Używamy intuicyjnie:
using Utility;
MyType[] array= ArrayUtil.CreateArray<MyType>(10);