2009-10-27 17 views
11

दोपहर सभी,सी #: पॉइंटर सरणी बनाने के लिए जेनेरिक का उपयोग

यदि आप कृपया थोड़ी मदद करते हैं। .NET में 2 जीबी ऑब्जेक्ट सीमा को बाधित करने के लिए मैंने एक कक्षा बनाई है जो ढेर पर स्मृति आवंटित करती है और इससे मुझे मेरी फ्री रैम की सीमा तक सरणी बनाने की अनुमति मिलती है। हालांकि, विकास की आसानी के लिए (क्योंकि यह अवधारणा का प्रमाण था) इसे लंबे समय तक कठिन कोडित किया गया था। अब यह काम करता है कि मैं जेनेरिक का उपयोग करने के लिए कोड को बदलने की कोशिश कर रहा हूं, इसलिए मैं कई प्रकार के लिए एक ही कोड का उपयोग कर सकता हूं।

मेमोरी आवंटित करने और सरणी को सही ढंग से इंडेक्स करने के लिए मुझे उसी प्रकार के पॉइंटर्स की आवश्यकता होती है, जिसमें सरणी होगी यानी एक लंबी सरणी को long*[] myLargeArray की आवश्यकता होती है। जब मैं जेनरिक इस घोषणा T*[] myLargeArray है, जो हमेशा त्रुटि 'का पता नहीं ले सकते, के आकार मिलता है, या किसी प्रबंधित प्रकार के लिए सूचक की घोषणा (' टी ')'

का उत्पादन हो जाता है का उपयोग समस्या है

अग्रिम धन्यवाद।

पीएस किसी से पूछने से पहले, हाँ मुझे वास्तव में ऐसे बड़े सरणी की आवश्यकता है।

एक 2D सरणी के लिए

कोड उदाहरण:


    LargeArray <int> myArray = new LargeArray<int>(x, y); 

    public unsafe class LargeArray where T : struct 
    { 
     ... 
     private T*[] tArr; 
     ... 
     public LargeArray(long sizeI, long sizeJ) 
     { 
      ... 
      myLargeArray = new T*[sizeI]; 
      ... 
     } 
    } 

उत्तर

0
MSDN

यहां तक ​​कि जब असुरक्षित कीवर्ड के साथ किया है, एक प्रबंधित वस्तु का पता लेने के एक के आकार हो रही से

प्रबंधित ऑब्जेक्ट, या किसी प्रबंधित प्रकार पर पॉइंटर घोषित करने की अनुमति नहीं है। अधिक जानकारी के लिए Unsafe Code and Pointers (C# Programming Guide).

इसके अलावा, मैं अगर आप कर रहे हैं पता नहीं है देखते हैं, लेकिन यकीन है कि आप अपने कोड में fixed keyword उपयोग कर रहे हैं।

11

C# programming guide के अनुसार:

  • sbyte, बाइट, लघु, ushort, पूर्णांक, uint, लंबे, Ulong, चार:

    निम्नलिखित प्रकार के किसी भी एक सूचक प्रकार हो सकता है , फ्लोट, डबल, दशमलव, या बूल

  • कोई भी एनम प्रकार।
  • कोई भी सूचक प्रकार।
  • कोई भी उपयोगकर्ता द्वारा परिभाषित संरचना प्रकार जिसमें अप्रबंधित प्रकार के फ़ील्ड शामिल हैं।

आप अपने सामान्य प्रकार पर struct बाधा देते हैं, संकलक अनुमान लगाने के लिए उपर्युक्त सभी आवश्यकताओं को पूरा किया जाएगा कि (विशेष रूप से अंतिम बिंदु) के लिए पर्याप्त जानकारी नहीं है।

चूंकि हमारे पास सी # में टेम्पलेट्स नहीं हैं, इसलिए आप समझने वाले संख्यात्मक प्रकारों के लिए अपने सरणी/सूचक एडाप्टर के अधिभार बनाने पर विचार करना चाहेंगे, या एक फैक्ट्री क्लास जो LargeArray को एक निश्चित प्रकार के आकार के रूप में बनाता है ।

+0

मुझे लगता है कि फैक्ट्री पैटर्न निश्चित रूप से यहां जाने का तरीका है। –

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