2008-09-30 15 views
34

मैं इसे कुछ अलग तरीकों से आजमा रहा हूं, लेकिन मैं इस निष्कर्ष पर पहुंच रहा हूं कि यह नहीं किया जा सकता है। यह एक भाषा सुविधा है जिसे मैंने अतीत में अन्य भाषाओं से लिया है। क्या यह सिर्फ कुछ है जो मुझे लिखना चाहिए?स्थिर सूचकांक सी # में समर्थित नहीं हैं?

उत्तर

59

नहीं, स्थिर सूचकांक सी # में समर्थित नहीं हैं। हालांकि, अन्य उत्तरों के विपरीत, मैं देखता हूं कि उन्हें आसानी से कैसे इंगित किया जा सकता है। पर विचार करें:

Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591) 
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo") 

यह अपेक्षाकृत शायद ही कभी इस्तेमाल किया जाएगा, मुझे लगता है, लेकिन मुझे लगता है कि यह अजीब है कि यह निषिद्ध है - यह कोई विशेष कारण के लिए विषमता जहाँ तक मैं देख सकते हैं देता है।

+2

बिल्कुल। उनके पास जगह है। यहां पर डिज़ाइन मुद्दों के बारे में बात करने वाले अन्य लोगों ने स्पष्ट रूप से क्लासिक भाषा के साथ काम नहीं किया है, क्योंकि वे बहुत उपयोगी हैं। – user9991

+1

हाँ। वही तो मैं कह रहा हूँ। वास्तुकला में उनके पास एक बहुत ही उपयोगी जगह है। कुछ लोगों को लगता है कि उनके अंधेरे हैं, मुझे लगता है! – Kilhoffer

+4

बकवास। अब मुझे एक स्थिर विधि कैश लिखना होगा। कैश के बजाय गेट (कुंजी) प्राप्त करें [कुंजी] ... – Gishu

16

आप स्थिर अनुक्रमित गुणों का उपयोग करके स्थिर indexers अनुकरण कर सकते हैं:

public class MyEncoding 
{ 
    public sealed class EncodingIndexer 
    { 
     public Encoding this[string name] 
     { 
      get { return Encoding.GetEncoding(name); } 
     } 

     public Encoding this[int codepage] 
     { 
      get { return Encoding.GetEncoding(codepage); } 
     } 
    } 

    private static EncodingIndexer StaticIndexer; 

    public static EncodingIndexer Items 
    { 
     get { return StaticIndexer ?? (StaticIndexer = new EncodingIndexer()); } 
    } 
} 

उपयोग:

Encoding x = MyEncoding.Items[28591]; // Equivalent to Encoding.GetEncoding(28591) 
Encoding y = MyEncoding.Items["Foo"]; // Equivalent to Encoding.GetEncoding("Foo") 
+3

हालांकि जॉन का उत्तर (सामान्य रूप में) सबसे सही है, यह कुछ स्थितियों के लिए इतना बुरा विकल्प नहीं है। – Thiru

0

नहीं है, लेकिन यह एक स्थिर क्षेत्र है कि एक वर्ग का उपयोग करता है का एक उदाहरण रखती है बनाने के लिए संभव है एक सूचकांक ...

namespace MyExample { 

    public class Memory { 
     public static readonly MemoryRegister Register = new MemoryRegister(); 

     public class MemoryRegister { 
     private int[] _values = new int[100]; 

     public int this[int index] { 
      get { return _values[index]; } 
      set { _values[index] = value; } 
     } 
     } 
    } 
} 

... जिस तरह से आप इरादा रखते हैं उसमें किस तक पहुंचा जा सकता है जी। यह तत्काल विंडो में परीक्षण किया जा सकता है ...

Memory.Register[0] = 12 * 12; 
?Memory.Register[0] 
144 
संबंधित मुद्दे