2012-03-31 10 views
19

के साथ प्रारंभ किया जा सकता है, मैं कुछ मानों को संग्रहीत करने के लिए 2 डी सरणी बनाने की कोशिश कर रहा हूं जो इस तरह नहीं बदलते हैं।स्ट्रिंग के अलावा किसी संदर्भ प्रकार का एक कॉन्स्ट फ़ील्ड केवल शून्य त्रुटि

const int[,] hiveIndices = new int[,] { 
{200,362},{250,370},{213,410} , 
{400,330} , {380,282} , {437, 295} , 
{325, 405} , {379,413} ,{343,453} , 
{450,382},{510,395},{468,430} , 
{585,330} , {645,340} , {603,375} 
}; 

लेकिन जब संकलन मैं यह त्रुटि

hiveIndices is of type 'int[*,*]'. 
A const field of a reference type other than string can only be initialized with null. 

अगर मैं const to static बदलने मिलता है, यह संकलित करता है। मुझे समझ में नहीं आता कि कैसे कॉन्स्ट क्वांटिफायर को जोड़ना इस व्यवहार को प्रेरित करना चाहिए। const - - जो एक संदर्भ प्रकार है - यह सब पर अपने मूल्यों की अस्थिरता को प्रभावित नहीं हैं (आप अभी भी सरणी के भीतर किसी भी मूल्य उत्परिवर्तित कर सकते हैं) - सरणी बनाने

उत्तर

43

वास्तव में आप सरणी बनाने के लिए कोशिश कर रहे हैं readonly इसे संकलित करेगा, लेकिन वांछित प्रभाव नहीं है। निरंतर अभिव्यक्तियों का संकलन समय पर पूरी तरह से मूल्यांकन किया जाना चाहिए, इसलिए नए ऑपरेटर की अनुमति नहीं है।

आप अधिक इसी Compiler Error CS0134 देखें लिए ReadOnlyCollection<T>

देख जा सकता है:

एक निरंतर अभिव्यक्ति एक अभिव्यक्ति है कि पूरी तरह से संकलन समय पर मूल्यांकन किया जा सकता है। चूंकि संदर्भ-प्रकार का गैर-शून्य मान बनाने का एकमात्र तरीका नया ऑपरेटर लागू करना है, और क्योंकि नए ऑपरेटर को निरंतर अभिव्यक्ति में अनुमति नहीं है, केवल संदर्भ संदर्भ-प्रकार के स्थिरांक के लिए मान स्ट्रिंग के अलावा शून्य है।

+1

ग्रेट स्पष्टीकरण, धन्यवाद। – ABH

+0

वास्तव में एक रीडोनली 2 डी सरणी बनाने के लिए इसके लिए एक रैपर लिखने की आवश्यकता होगी क्योंकि 'AsReadOnly ' केवल एक-आयामी, शून्य-आधारित सरणी का समर्थन करता है: अधिक पढ़ने के लिए http://stackoverflow.com/questions/5079970/storing-2- आयामी-इन-रीडोनली-कॉन्स्ट-इन-अलग-वर्ग-whilst-keeping-no – BrokenGlass

+0

का मतलब है कि मैंने डाउनवॉट किया है, मेरा जवाब सबसे अच्छा नहीं है? – ABH

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