2017-08-30 67 views
5

我想用隨機字節填充緩衝區。緩衝區被定義爲一個字節列表。這是我想保持原樣的東西。這裏的定義是:用隨機字節填充列表

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

} 

而我的第一次嘗試是

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

然而,這給出了BUFF這樣的錯誤: 的對象引用需要非靜態字段,方法或屬性'Form1.buff'

然後我剛剛刪除了單詞「static」(我不確定這是否爲真),它變成了「public void RandomFillBuffer()」,但是這一次我得到這個buff的錯誤: 參數1:無法轉換'System.Collections.Generic.List'to'byte []'

我很感謝任何幫助解決任何2錯誤,如果他們有道理。

+1

祝賀您成爲爲數不多的第一次正確使用海報! – itsme86

回答

2

您遇到的問題是NextBytes填充數組[]而不是列表。你需要用它的大小

// 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()預計數組的索引定義一個數組,但你想傳遞一個List<>。解決這個問題的方法之一是改變你的List<>到一個數組:

byte[] buff = new byte[someSize]; 

你將不得不弄清楚someSize應該是什麼(這是由你)。如果沒有尺寸,你就無法填充。否則,它會如何知道何時完成?

1

第一:你試圖讓你的方法static(這意味着這種方法不是與對象的任何實例,而是與對象的類相關聯),並試圖引用不是靜態成員(你的buff是而不是static,因此與您的案例中的特定實例,特定Form相關聯)。 其次:您試圖使用Random.NextBytes(System.Byte[]),但提供了System.Collections.Generics.List<System.Byte>作爲參數。

下面的代碼應該爲你工作(此代碼假設至少是buff已經有一些數據,因此具有積極的長度):

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 

請注意,這代碼是不是最佳的,因爲它複製一個數組。但是,我猜,它能做到你想要的。