मेरे पास एक स्थिर वर्ग है जिसमें मैं शब्दकोशों का उपयोग .NET प्रकारों और एसक्यूएल प्रकारों के बीच मैप करने के लिए लुकअप टेबल के रूप में कर रहा हूं। यहाँ इस तरह के एक शब्दकोश का एक उदाहरण है:एक ConcurrentDictionary कैसे शुरू करें? त्रुटि: "निजी विधि का उपयोग नहीं कर सकते 'यहां जोड़ें'
private static readonly Dictionary<Type, string> SqlServerMap = new Dictionary<Type, string>
{
{typeof (Boolean), "bit"},
{typeof (Byte[]), "varbinary(max)"},
{typeof (Double), "float"},
{typeof (Byte), "tinyint"},
{typeof (Int16), "smallint"},
{typeof (Int32), "int"},
{typeof (Int64), "bigint"},
{typeof (Decimal), "decimal"},
{typeof (Single), "real"},
{typeof (DateTime), "datetime2(7)"},
{typeof (TimeSpan), "time"},
{typeof (String), "nvarchar(MAX)"},
{typeof (Guid), "uniqueidentifier"}
};
तो मैं एक सार्वजनिक विधि है जिसके नीचे एक .NET प्रकार में गुजरता है और यह इसी एमएस एसक्यूएल सर्वर इस शब्दकोश का उपयोग कर प्रकार की स्ट्रिंग मान देता है। हालांकि, चूंकि इसका डेटाबेस डेटाबेस बनाने के लिए लुकअप टेबल के रूप में उपयोग किया जा रहा है, मुझे लगता है कि इसे एक ConcurrentDictionary बनाने के लिए समझ में आता है। मैं करने के लिए इसे बदल दिया है:।
private static readonly IDictionary<Type, string> SqlServerMap = new ConcurrentDictionary<Type, string>
{
{typeof (Boolean), "bit"},
{typeof (Byte[]), "varbinary(max)"},
{typeof (Double), "float"},
{typeof (Byte), "tinyint"},
{typeof (Int16), "smallint"},
{typeof (Int32), "int"},
{typeof (Int64), "bigint"},
{typeof (Decimal), "decimal"},
{typeof (Single), "real"},
{typeof (DateTime), "datetime2(7)"},
{typeof (TimeSpan), "time"},
{typeof (String), "nvarchar(MAX)"},
{typeof (Guid), "uniqueidentifier"}
};
लेकिन अब यह सब कुछ {} (ConcurrentDictionary की यानी सभी प्रमुख मान जोड़े) के भीतर लाल को रेखांकित करता है और त्रुटि "है यहाँ निजी विधि तक नहीं पहुंच पा 'जोड़ें' मुझे नहीं पता ऐसा लगता है क्योंकि मैंने इसे निजी स्थैतिक रूप से पढ़ा है, क्योंकि मैंने अभी एक सार्वजनिक स्थिर संस्करण बनाकर परीक्षण किया है और मुझे एक ही त्रुटि मिलती है।
आह ठीक है, मैं देखता हूं, धन्यवाद। काश मैं इसे पहले से ही 'स्थिर ConcurrentDictionary' में शुरू कर सकता था क्योंकि मुझे पता है कि यह बदलने वाला नहीं है और मैं बस इसे जल्दी से एक्सेस करना चाहता हूं। मैं देखूंगा कि मैं क्या कर सकता हूं। – Drew
@ ड्रू और आप संग्रह प्रारंभकर्ता के उपयोग के बजाय, कन्स्ट्रक्टर को 'आईन्यूमेरेबल' पास करके कर सकते हैं। – Servy
ओह, मैंने आपके उत्तर में जो मतलब बताया, उसे गलत समझा, धन्यवाद! – Drew