2012-05-04 6 views
5

मैं डेटाबेस में किसी फ़ाइल के एन्कोडिंग को संग्रहीत करने का तरीका जानने का प्रयास कर रहा हूं, फिर उसे इसे अपने मूल प्रकार (System.Text.Encoding) में वापस लाने में सक्षम हो। लेकिन मुझे एक त्रुटि मिल रही है जिसे मैं समझ नहीं पा रहा हूं। तो, मूल रूप से जहाँ तक मैं समझता हूँएन्कोडिंग एक गणना नहीं है?

Type provided must be an Enum. 
Parameter name: enumType 

:

using System; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      object o = Encoding.Unicode; 
      Encoding enc = (Encoding) Enum.Parse(typeof(Encoding), o.ToString()); 
     } 
    } 
} 

अपवाद मैं पार्स लाइन में मिलता है का कहना है:

एक परीक्षण के रूप में, मैं त्रुटि पुन: पेश करने के लिए इस छोटे से कार्यक्रम बनाया मुझे बता रहा है कि typeof(Encoding) एनम प्रकार वापस नहीं करता है? प्रदान की गई किसी भी मदद के लिए अग्रिम धन्यवाद।

+0

आपके उत्तरों के लिए धन्यवाद। मैंने इसे बदल दिया: --- 'ऑब्जेक्ट ओ = एन्कोडिंग। यूनिकोड.कोडपेज; एन्कोडिंग एन्क = एन्कोडिंग। गेट एन्कोडिंग (int.Parse (o.ToString())); ' –

उत्तर

12

नहीं, यह एक enum नहीं है। यह स्थैतिक गुणों वाला एक वर्ग है। कुछ इस तरह:

public class Encoding 
{ 
    public static Encoding ASCII 
    { 
     get 
     { 
      //This is purely illustrative. It is not actually implemented like this 
      return new ASCIIEncoding(); 
     } 
    } 
} 

आप, डेटाबेस में एन्कोडिंग स्टोर कोड पेज संग्रहीत करना चाहते हैं:

int codePage = SomeEncoding.CodePage; 

और Encoding.GetEncoding(theCodePage) का उपयोग एन्कोडिंग पाने के लिए।

+0

मैं देखता हूं, धन्यवाद और आपके लिए कुडोस :) –

2

यह सही है। , राइट-क्लिक करें परिभाषा के लिए जाना दिखाता है कि एन्कोडिंग इस तरह परिभाषित किया गया है:

public abstract class Encoding : ICloneable 
1

Encoding एक वर्ग और नहीं गणन है। कॉलिंग Encoding.Unicode सार्वजनिक संपत्ति को कॉल कर रहा है। इस लाइन गलत है:

Encoding enc = (Encoding) Enum.Parse(typeof(Encoding), o.ToString()); 

आप Enum.Parse को देखें, तो आपको लगता है कि पहले पैरामीटर enumType होना चाहिए देखेंगे और आप पूरी तरह से अलग वस्तु गुजर रहे हैं।

1

Encoding.Unicode और कक्षा Encoding कक्षा के स्थैतिक रीडोनली गुण हैं। वे enum सदस्य नहीं हैं।

आप के बजाय डेटाबेस में एन्कोडिंग का CodePage संग्रहीत कर सकती है, और Encoding.GetEncoding का उपयोग कर इसे पुनः प्राप्त:

// store the encoding 
WriteToDatabase(myEncoding.CodePage); 

// retrieve the encoding used 
Encoding encoding = Encoding.GetEncoding(/* value from the database */); 

यह विभिन्न एन्कोडिंग में से डेटा भंडारण के लिये एक ध्वनि रणनीति नहीं हो सकता है ... फिर भी, मुझे नहीं पता कि आप बड़ी तस्वीर में क्या करने के लिए काम कर रहे हैं।

+0

धन्यवाद, हाँ मुझे लगा कि यह रास्ता था –