C++'da yapılmış eski bir projeyi C#'a yeniden yazmakla meşgulüm.
Benim görevim programı orijinaline mümkün olduğunca yakın çalışacak şekilde yeniden yazmak.
Bir dizi dosya işleme sırasında, bu programı yazan önceki geliştirici, bir dosyanın yazılması gereken set formatına karşılık gelen bir ton alan içeren bir yapı oluşturur, böylece tüm bu iş benim için zaten yapılır.
Bu alanların tümü bayt dizileridir. C++ kodunun daha sonra yaptığı şey, tüm bu yapıyı tüm boşluk karakterlerine (0x20
) ayarlamak için memset
kullanmaktır. Bir satır kod. Çok kolay.
Bu çok önemlidir çünkü bu dosyanın eninde sonunda gideceği yardımcı program dosyayı bu formatta beklemektedir. Yapmam gereken şey, bu yapıyı C#'ta bir sınıfa dönüştürmek, ancak bu bayt dizilerinin her birini tüm boşluk karakterlerine kolayca başlatmanın bir yolunu bulamıyorum.
Sonunda sınıf kurucusunda bunu yapmak zorunda kaldım:
//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
UserCode[index] = 0x20;
index++;
}
Bu iyi çalışıyor, ancak eminim bunu yapmanın daha basit bir yolu olmalı. Dizi, yapıcıda UserCode = new byte[6]
olarak ayarlandığında, bayt dizisi otomatik olarak varsayılan null değerlerine başlatılır. Sınıfımın yapıcısını çağırdığımda dizinin bu şekilde doğrudan ilklendirilmesi için bildirim sırasında tüm boşlukların olmasını sağlamanın bir yolu yok mu? Ya da memset
benzeri bir fonksiyon?
Kullanabilirsiniz Enumerable.Repeat()
0x20 olarak başlatılan 100 öğeden oluşan dizi:
byte[] arr1 = Enumerable.Repeat(0x20,100).ToArray();