2017-08-30 100 views
5

Bir arabelleği rastgele baytlarla doldurmaya çalışıyorum. Tampon, baytların bir listesi olarak tanımlanır. Bu olduğu gibi tutmak istediğim bir şey. İşte tanımı şöyledir:Rastgele baytlarla bir listeyi doldurma

namespace NameofProject 
{ 
    public partial class Form1 : Form 
    { 
    List<byte> buff = new List<byte>(); 
    } 

} 

Ve benim ilk girişimi

public static void RandomFillBuffer() 
{ 
    Random rnd = new Random(); 
    rnd.NextBytes(buff); 
} 

olduğunu Oysa bu buff için böyle bir hata veriyor: Bir nesne başvurusu statik olmayan alan, yöntem veya özellik için gereklidir 'Form1.buff'

Sonra "static" sözcüğünü sildim (bunun doğru olup olmadığından emin değilim) ve "public void RandomFillBuffer()" olur, ancak bu sefer tutkunu bu hatayı alıyorum: Bağımsız değişken 1: 'System.Collections.Generic.List' - 'byte []'

Mantıklı olursa 2 hatadan herhangi birini çözmek için herhangi bir yardımı takdir ediyorum.

+1

Doğru yapan ilk birkaç posterden biri olmanızdan dolayı tebrikler! – itsme86

cevap

2

Yapmakta olduğunuz sorun, NextBytes öğesinin bir listeyi değil [] doldurmasıdır. Onun büyüklüğü

// Put random bytes into this array. 
    byte[] array = new byte[8]; 
    // Fill array with random bytes. 
    Random random = new Random(); 
    random.NextBytes(array); 
5

NextBytes() bir dizi beklediğini çünkü bu sorunu alıyoruz indeksi ile bir dizi tanımlamak gerekir, ancak bir List<> geçmesine çalışıyoruz. bunu çözmek için bir yolu senin List<> bir diziye değiştirmek olacaktır: Sen someSize (o size kalmış) ne olması gerektiğini anlamaya zorunda gidiyoruz

byte[] buff = new byte[someSize]; 

. Boyutu olmadan bir şeyleri dolduramazsın. Aksi halde, bittiğinde nasıl olur?

1

İlk olarak: yönteminizi static (bu yöntemin nesnenin herhangi bir örneğiyle değil, nesne sınıfıyla ilişkili olduğu anlamına gelir) denemeye çalıştınız ve statik üyeye başvurmaya çalıştınız (buff ürününüz static değil ve bu durumda belirli bir örnekle, sizin durumunuzda belirli bir Form ile ilişkilidir). İkincisi: Random.NextBytes(System.Byte[]) kullanmayı denediniz, ancak bir argüman olarak System.Collections.Generics.List<System.Byte> sağladınız.

aşağıda kodu sizin için çalışması gerekir (bu kod böylece zaten bazı veri olduğunu buff en az varsayar ve olumlu bir uzunluğa sahiptir):

var generator = new Random(); 
var array = new Byte[buff.Count]; // create a local array of the same size as your list 
generator.NextBytes(array); // fill the array with random bytes 
buff = array.ToList(); // copy array to a new list and let field "buff" reference this freshly created list 

Lütfen not, bu kod olduğunu optimum değil bunun nedeni bir dizi kopyalar. Ama istediğini yapar, sanırım.