2013-02-19 16 views
5

मेरे पास WriteableBitmap है जो मैं पिक्सेल प्लॉट करने के लिए एक असुरक्षित विधि का उपयोग करता हूं। अनिवार्य हिस्सा इस तरह दिखता है:मैं सी # में पॉइंटर जेनेरिक कैसे बना सकता हूं?

private unsafe void DrawBitmap(WriteableBitmap bitmap, byte[] pixels) 
{ 
     // Boilerplate omitted... 

     fixed (byte* pPixels = pixels) 
     { 
      for (int y = 0; y < height; y++) 
      { 
       var row = pPixels + (y * width); 
       for (int x = 0; x < width; x++) 
       { 
        *(row + x) = color[y + height * x]; 
       } 
      } 
     } 

     bitmap.WritePixels(new Int32Rect(0, 0, width, height), pixels, width*pf.BitsPerPixel/8, 0); 
} 

हालांकि, यह निश्चित उपयोगकर्ता क्या चाहता है कि साजिश प्रकार byte की है करने के लिए नहीं है, और यह समझ बनाने के लिए इस विधि का सामान्य (यानी DrawBitmap<T>) बनाने के लिए होगा, लेकिन कैसे कर सकते हैं मैं प्रकार के सूचक pPixels बनाते हैं?

क्या कोई अन्य चाल है जो मेरे DrawBitmap जेनेरिक बनाती है?

+4

"जेनेरिक" का अर्थ है कि एक ही विधि (एक ही आईएल) * सभी * प्रकारों के लिए काम करता है, न कि केवल आप वास्तव में टाइप पैरामीटर के रूप में उपयोग कर रहे हैं। विभिन्न पूर्णांक प्रकार (बाइट, int, ...) को अलग-अलग आईएल की आवश्यकता होती है, ताकि आप विधि को सामान्य नहीं बना सकें। – dtb

+0

मुझे नहीं लगता कि 'pPixels' या 'pixels' कहां से आ रहा है? सभी कोड पोस्ट करें? – LukeHennerley

+1

लेकिन जैसा कि @ डीटीबी कहते हैं, आपको एक प्रकार की आवश्यकता है जो 'ऑब्जेक्ट' से सरल शब्दों में प्राप्त होता है, सामान्य प्रकारों में मूल्य प्रकारों का उपयोग नहीं किया जा सकता है। मैं इसके बजाय विधि के विभिन्न ओवरलोड का उपयोग करने पर विचार करता हूं। – LukeHennerley

उत्तर

3

overloads का उपयोग करने पर विचार करें।

public void MethodA(byte[] pPixels) {} 
public void MethodA(int[] pPixels {} 
//etc... 
संबंधित मुद्दे