C# Struct İçerisinde Array Tanımlama

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,335
Reaksiyon puanı
3,155
Puanları
293
cannot have instance field initializers in structs

hatası veriyor, internetteki araştırmalarımdan pek birşey anlamadım.
bilen varsa yardımcı olabilir mi?
 

aslanpayi

Doçent
Katılım
12 Ağustos 2009
Mesajlar
523
Reaksiyon puanı
1
Puanları
0
Tam olarak yapmak istediğini yazsaydın fikir veren daha çok olurdu.
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,335
Reaksiyon puanı
3,155
Puanları
293
yahu koda ne gerek var arkadaşlar.
çok basit birşeydi kod
ama c# üzerinde doğrudan yapılamıyormuş.
alın size kod

Kod:
public struct deneme
{
    public int[] merhaba = new int[5];
    public int gülegüle;
}

işte bu olmuyor.
public int[] merhaba = { 1,2,3,4,5}
desem de olmuyor
kodun önemi yok
herhangi bir şekilde struct yapıya array eklemeyi soruyorum.
 

ankarali_gnc"

Asistan
Katılım
30 Kasım 2011
Mesajlar
174
Reaksiyon puanı
0
Puanları
0
kardeş ceneric olarak tanımlasan olmaz mı? list<> komutu ile hemde otomatik kendısı buyur kuçulur..veriye göre..
ayrıca public int gülegüle demişsin:) ü harfleri olmaz:D böyle birşey kabul eder mi sence bir düşün int içine string veri girişi yapmıssın:D
ayrıca tam olarak ne yapmaya calıştın çözemedim..
int içinde int string içinde string tanımlarsın eger başka bişi yapcaksan object olarak tanımla :)ama bu seferde veri tipinin ne olduğunu bulamazsın..

sen jenerik list kullan:) boş geç array'i jenerik list kullan oh kafan rahat ha illa dizi tanımlıcam diyorsan
Array komutunun Resize diye bir özelligi var sana aşagıda bir örnek yaptım ok kardeş bunu kullan derım
ogrenciler bir dizidir ama globak dizi... ok ;) yapmak istedigini tam anlamadıgım için bu sekılde ornekler v.s verdim dostum umarım işine yarar...

string[] ogrenciler = new string[0];
if (!ogrenciler.Contains(txtGirilenDeger.Text))
{
Array.Resize(ref ogrenciler, ogrenciler.Length + 1);


ogrenciler[ogrenciler.Length - 1] = txtGirilenDeger.Text;
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
Merhaba cgrszone,

Struct içerisinde instance oluşturamazsın. Struct, object içeren recorddur. Template olarak düşünebilirsin. Şöyle yapabilirsin:

public struct deneme
{
public int[] merhaba = new int[5];
public int gulegule;
}

yerine

public struct deneme
{
public int[] merhaba;
public int gulegule;
}

olarak struct oluştur. Kullanmak istediginde:

{
.
.
.
deneme myStruct = new deneme();
myStruct.merhaba = new int[5];
.
.
.
}

şeklinde kullanabilirsin.
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,335
Reaksiyon puanı
3,155
Puanları
293
@cgrszone biliyorsunuz da neden cevap yazmadınız bu güne kadar.
saçma sapan cevaplar geldi herkesten, gülegüle isimli int tanımlanmaz gibi.
neyse @kizanlik teşekkürler
bir de fixed ile yapılabiliyormuş onu öğrendim.
 

kizanlik

Asistan
Katılım
25 Mart 2012
Mesajlar
250
Reaksiyon puanı
0
Puanları
0
[MENTION=25201]cgrszone[/MENTION]: pardon.
[MENTION=195265]Ben Kenobi[/MENTION]:

Vermiş oluğun örnekten, structın safe mi unsafe mi olduğunu anlayamadım. Fixed deyince bi' durdum.

Kabaca, safe için .NET FrameWork'ün dışına taşmayan fakat unsafe için .NET FrameWork'ün dışına taşan yapılar diyebiliriz.

- Fixed
, unsafe yapılarda kullanılır.
- Unsafe yapılar da genellikle thread içerisinde kullanılır. (Thread herhangi bir amaç için kullanılabilir.)
- Unsafe gözönüne alınırsa, unmanaged kodlar ile haberleşmek isteyen threadlerden söz edebiliriz.

Bu durumda da, .NET'i hedef almayan yazılımdan bahsetmemiz gerekir. Böyle bir yazılımla (genellikle donanım kontrol eden) veri alışverişinde bulunmak istiyorsan, yapıya dikkat etmen gerekir.

.NET FrameWork'te GC (GarbageCollector) sistemi var. GC, Safe (managed) kodların kapladığı alanı canı istediğinde boşaltabiliyor. Bu nedenle, gelecek olan verinin depolanacağı alanı korumak için de yapı unsafe olarak tasarlanıyor. Böylece GC o yapıya dokunmuyor ve veri sağlam olarak ulaşıyor.

Safe yapı içerisinde çalışıyorsan, bahsettiğim şekilde kullanmanı tavsiye ederim. Unsafe yapı içerisindeysen, duruma göre, fixed bir çözüm olabilir.
 

Ben Kenobi

Dekan
Katılım
6 Kasım 2011
Mesajlar
7,335
Reaksiyon puanı
3,155
Puanları
293
@cgrszone üstad canın sağolsun.
ama üzüldüm yani, birşeyimi mi gördün de cevap yazmadın :(

@kizanlik ben de tam onu soracaktım bu safe, unsafe meselesi ne oluyor diye.
safe kullanmak özel şartlar haricinde daha mantıklı yani.
çok teşekkür ederim.

 
Üst