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

Parse 行に表示される例外には、次のように書かれています。

Type provided must be an Enum.
Parameter name: enumType

typeof(Encoding)だから、基本的に私が理解している限り、それは列挙型を返さないと言っているのでしょうか? 提供されたヘルプに事前に感謝します。

4

4 に答える 4

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)、エンコーディングを取得するために使用します。

于 2012-05-04T17:19:48.600 に答える
2

それは正しい。右クリックして定義に移動すると、エンコーディングが次のように定義されていることがわかります。

public abstract class Encoding : ICloneable
于 2012-05-04T17:20:28.117 に答える
2

Encoding.UnicodeおよびEncoding.ASCIIは、クラスの読み取り専用の静的プロパティですEncoding。彼らはenumメンバーではありません。

代わりに、エンコーディングをデータベースに保存し、次CodePageを使用して取得できますEncoding.GetEncoding

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

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

これは、さまざまなエンコーディングのデータを保存するための適切な戦略ではないかもしれません...しかし、全体像で何を達成しようとしているのか正確にはわかりません.

于 2012-05-04T17:21:30.823 に答える
1

Encoding列挙ではなくクラスです。呼び出しEncoding.Unicodeはパブリック プロパティを呼び出しています。この行は間違っています:

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

Enum.Parseを見ると、最初のパラメーターが enumType である必要があり、まったく異なるオブジェクトを渡していることがわかります。

于 2012-05-04T17:20:37.993 に答える