2016-04-06 11 views
1

Diyelim ki bir dizi özel tipim var ve ona 10 tane özel yapı tipi yerleştirdim. CustomType[] Record = new CustomType[10];Dizinin bir öğesi olan bir yapının tüm alanlarını konsola nasıl gösteririz? C#

Her bir CustomType'ın alanları olması nedeniyle, dizideki CustomType öğelerinin her birine ait alanları atayabilirim. Örneğin :

Record[0].name = "John"; 
Record[0].age = 34; 

ve int ya da tel gibi olağan tipte, dizeye türünün değerini döner .ToString() metodu vardır. Biz

someIntArray[0] = 32; 
Console.WriteLine(someIntArray[0].ToString()); 

vardı Yani eğer Sonra konsolda çıktı "32" değil onun değer türünü, int tanınacak.

Ancak CustomType dizisi ile yukarıdaki örnek ile aynı metodu kullanarak ve geç ise:

Console.WriteLine(Record[0].ToString()); 

Sonra (kendi alanlarında) nesnesi içeren bu değer (ler) elde olmaz ama bunun türü. Ben mesela yazabilirsiniz Tabii :

Console.WriteLine(Record[0].name + Record[0].age); 

Ama yapı çok alanı varsa bu çok hızlı eski ve sıkıcı alır görebilirsiniz. Özellikle de yalnızca bir struct nesnesinin tüm alanlarını, ancak dizideki tüm struct nesnelerini yazdırmak istemiyorsanız.

İşte benim sorum şu: .NET'te bir yöntem var mı, yoksa başka kolay bir yol var mı? Böylece, bir dizi elemanının tüm alanlarını bir yapı gibi daha basit, daha hızlı bir şekilde işleyebilirim (ör., Baskı).

+0

Ve 'Foreach' denedik ama her alanda şeyler yapmak, yapılar ile çalışmaz:

struct Record { string name; int age; public override string ToString() { return String.Format("{0} {1}", record.name, record.age); } } 

Böylece açıkça söylemek zorunda değilsiniz. –

+0

@AlexD Console.WriteLine (Record [0]) yazarımsa '' CustomType 'yazdıracaktır. –

+0

Bir uzantı yöntemi olan IMHO kullanarak favorim. – code4life

cevap

1

Yine de bir yapıda ToString() öğesini geçersiz kılabilirsiniz!

Console.WriteLine(record); // e.g., Joe 5 
+1

Bir yapıda ToString() öğesini geçersiz kılabilirsiniz. http://stackoverflow.com/questions/1249086/boxing-on-structs-when-calling-tostring – ScoobyDrew18

+0

Oh, havalı. Doğrulamak için bu bağlantıya baktım: http://zetcode.com/lang/csharp/structures/. Cevabımı güncellerim. – gnalck

+0

Teşekkürler! Bunu daha önce nasıl düşünmedim? Düz bir yerdeydi. Her bir yapıyla çalışacak daha genelleştirilmiş bir yönteme sahip olamayacağınızı sanıyorum, ve her bir farklı yapı için her seferinde alan adlarını ekleyen dizeyi biçimlendirmek zorunda kalacaksınız. –

1

Sanırım insanlar yapıların yöntem içeremeyeceğini varsayarlar, ancak kesinlikle yapabilirler! Sadece bir ToString() yöntemi oluşturun.

İlgili konular