C# Struct içinde Array tanımı ve init edilmesi

Başlatan yldzelektronik, 12 Ocak 2014, 11:47:36

yldzelektronik

Selamlar,

C# .net kullanıyorum.

public struct ShowDevice_t
        {
            public bool[] Request;
            public bool[] Set;
            public bool[] Reset;
        }
        ShowDevice_t ShowDevice;


Şeklinde yapı oluşturuyorum.Ancak bu yapıyı;

ShowDevice.Set[DeviceID - 1] = true;


kullanamıyorum.DeviceID int bir değişken.

İçerisinde dizi tipte değişkenler var.Bu dizilerin boyutlarını belirleyemediğim için yapı elemanlarına değer atayamıyorum.

Sanırım yapı içindeki dizilerin eleman sayılarını belirlemediğimden oluyor.Ki bu da init edememek oluyor sanırım?

Bu sorunu nasıl çözebilirim?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Gökhan BEKEN

#1
c de böyle:

Yapı değişkenlerine ilk değer vermek:
    struct Tarih {
        char *p;
        char katar[5];
        int sayilar[5];
        char gun,ay,yil;
    }x,y,z;
    
    struct Tarih.x = {"ornek","katar",{10,20,30},26,12,14};

veya:
   
struct Tarih.x = {"ornek","katar",10,20,30,40,50,26,12,14}; //küme parantezi kullanılmazsa 5 elemana da değer vermek zorundayız

görüldüğü gibi küme parantezi içinde virgül ayırımı ile değer verip noktalı virgül ile bitiriyoruz



------------

c#'ta böyle:

public struct deneme
{
   public int[] dizi;
}

Kullanmak istediginde:

deneme DENEME = new deneme();
DENEME.dizi = new dizi[5];


(c#'ın gıcık bir yazım şekli var)
Özel mesaj okumuyorum, lütfen göndermeyin.

yldzelektronik

@meftun yalnız senin verdiğin örnek çalışmıyor?

Öyle bir tanımlamaya izin vermiyor.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

fatih6761

Öncelikle bool türünde dizilere gerçekten ihtiyacınız var mı? Bunu bir daha düşünün. Eğer yine de bitler ile yapacaksanız üç ihtimal kalıyor:
Birincisi, bu bool türünde dizilerin boyutunu ya da en azından maksimum boyutunu bilmeniz gerekiyor? Yani her biri için 32-bit yeter mi? Yoksa çok daha mı büyük?
Eğer 32-bit yeterse BitVector32 sınıfını kullanabilirsiniz.
Eğer bunun 100 bite kadar yolu var diyorsanız BitArray kullanın.
BitVector32 türü bellekte 32-bit yani tam 4 bayt yer kaplar. Bitwise işlemlerle istediğiniz biti yani boolean değeri true veya false yapabilirsiniz.
BitArray türü ise ilklendirme işleminde belirttiğiniz bit sayısı kadar yer kaplar. Yani 1.000.000 bitlik veri yalnızca 122KB yer kaplar.
Ancak bool[] türünde bir dizi pek hoş değil. Her bir bool yani bit için tam bir bayt yer ayrılır. 1.000.000 bitlik veri için 1MB yer ayrılır. Bellek bakımından verimsizdir. Ancak erişim hızı biraz daha yüksektir.
Bir de tabi "dirty" yolu var :) 32-bit için bir Int32 oluşturur ve bunun tüm bitlerini elle set-reset edersiniz ama bunu önermem.