2012-05-04 68 views
5

我試圖找出一種方法來存儲在數據庫中的文件的編碼,然後能夠檢索到它的原始類型(System.Text.Encoding)。但是我收到了一個我不明白的錯誤。編碼不是枚舉嗎?

作爲一個測試,我創造了這個小程序來重現錯誤:

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()); 
     } 
    } 
} 

我在解析線得到異常說:

Type provided must be an Enum. 
Parameter name: enumType 

所以,基本上,據我瞭解告訴我typeof(Encoding)不返回枚舉類型? 提前感謝您提供的任何幫助。

+0

謝謝你的回答。我改爲: --- 'object o = Encoding.Unicode.CodePage; 編碼enc = Encoding.GetEncoding(int.Parse(o.ToString()));' –

回答

12

不,它不是枚舉。它是一個具有靜態屬性的類。事情是這樣的:

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

謝謝,是的,我認爲這是方式 –