2012-05-04 17 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

ご回答いただきありがとうございます。私はこれに変更しました: --- 'オブジェクトo = Encoding.Unicode.CodePage; encoding enc = Encoding.GetEncoding(int.Parse(o.ToString())); –

答えて

12

いいえ、enumではありません。静的なプロパティを持つクラスです。このような何か:

int codePage = SomeEncoding.CodePage; 

とエンコーディングを取得するためにEncoding.GetEncoding(theCodePage)を使用します。

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

あなたは、データベース内のエンコーディングを保存するコードページを保存したい場合は

+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

ありがとう、はい私はそれが道だと思った –

関連する問題