2012-05-04 39 views
5

Tôi đang cố gắng tìm ra cách để lưu trữ mã hóa của một tệp trong cơ sở dữ liệu để sau đó có thể truy xuất nó trở lại kiểu gốc của nó (System.Text.Encoding). Nhưng tôi đang gặp lỗi tôi không hiểu.Mã hóa không phải là một kiểu liệt kê?

Là một thử nghiệm, tôi đã tạo chương trình nhỏ này để sao chép các lỗi:

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

Ngoại lệ tôi nhận được trong dòng Parse nói:

Type provided must be an Enum. 
Parameter name: enumType 

Vì vậy, về cơ bản như xa như tôi hiểu đang nói với tôi rằng typeof(Encoding) không trả về loại Enum? Cảm ơn trước vì đã được trợ giúp.

+0

Cảm ơn tất cả các câu trả lời của bạn. Tôi đã thay đổi thành: --- 'đối tượng o = Encoding.Unicode.CodePage; Encoding enc = Encoding.GetEncoding (int.Parse (o.ToString())); ' –

Trả lời

12

Không, nó không phải là một enum. Nó là một lớp với các thuộc tính tĩnh. Một cái gì đó như thế này:

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

Nếu bạn muốn lưu trữ mã hóa trong cơ sở dữ liệu, lưu trữ các trang mã:

int codePage = SomeEncoding.CodePage; 

Và sử dụng Encoding.GetEncoding(theCodePage) để có được mã hóa.

+0

Tôi thấy, cảm ơn và + kudo cho bạn :) –

2

Đúng vậy. Nhấp chuột phải, chuyển đến định nghĩa cho thấy rằng Mã hóa được xác định như sau:

public abstract class Encoding : ICloneable 
1

Encoding là một lớp và không liệt kê. Gọi số Encoding.Unicode đang gọi một tài sản công cộng. Dòng này là sai:

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

Nếu bạn nhìn vào Enum.Parse bạn sẽ thấy rằng các tham số đầu tiên nên enumType và bạn đang đi qua đối tượng hoàn toàn khác nhau.

1

Encoding.Unicode và là thuộc tính chỉ đọc tĩnh của lớp Encoding. Họ không phải là enum thành viên.

Bạn thay vì có thể lưu trữ các CodePage của mã hóa trong cơ sở dữ liệu, và lấy nó bằng cách sử Encoding.GetEncoding:

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

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

Điều này có thể không phải là một chiến lược âm thanh để lưu trữ dữ liệu mã hóa khác nhau ... Tuy nhiên, Tôi không biết chính xác những gì bạn đang làm để hoàn thành bức tranh lớn.

+0

Cảm ơn, vâng tôi đã đoán đó là cách –

Các vấn đề liên quan