2017-08-30 24 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); 
} 

है फिर भी इस शौकीन के लिए इस तरह के एक त्रुटि देता है: एक वस्तु संदर्भ गैर स्थिर क्षेत्र, विधि, या संपत्ति के लिए आवश्यक है 'फॉर्म 1.बफ'

फिर मैंने "स्थिर" शब्द को हटा दिया (मुझे यकीन नहीं है कि यह सच है) और यह "सार्वजनिक शून्य RandomFillBuffer()" बन जाता है, लेकिन इस बार मुझे यह त्रुटि buff के लिए मिल रही है: तर्क 1: से परिवर्तित नहीं कर सकता 'System.Collections.Generic.List' to 'byte []'

यदि वे समझ में आते हैं तो 2 त्रुटियों में से किसी एक को हल करने के लिए मैं किसी भी मदद की सराहना करता हूं।

+1

कुछ पहली बार पोस्टर में से एक होने पर बधाई जो इसे सही तरीके से करता है! – itsme86

उत्तर

2

आपके पास जो समस्या है, वह है कि नेक्स्टबाइट्स एक सरणी भरती है [] एक सूची नहीं। आप इसके आकार

// 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 

, टिप्पणी, क्योंकि कृपया इष्टतम नहीं इस कोड है कि एक सरणी कॉपी करता है। लेकिन यह वही करता है जो आप चाहते हैं, मुझे लगता है।

संबंधित मुद्दे