编码不是枚举吗?

时间:2012-05-04 17:16:12

标签: c# encoding enums

我正在试图找出一种方法来将文件的编码存储在数据库中,然后能够将其检索回原始类型(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)没有返回Enum类型? 提前感谢您提供的任何帮助。

4 个答案:

答案 0 :(得分: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)获取编码。

答案 1 :(得分:2)

没错。右键单击,转到定义显示Encoding定义如下:

public abstract class Encoding : ICloneable

答案 2 :(得分:2)

Encoding.UnicodeEncoding.ASCII是类Encoding的静态只读属性。他们不是enum成员。

您可以将编码的CodePage存储在数据库中,然后使用Encoding.GetEncoding检索它:

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

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

这对于存储不同编码的数据可能不是一个合理的策略......但是,我不确切地知道你在大局中要完成的工作。 < /子>

答案 3 :(得分:1)

Encoding是一个类而不是枚举。呼叫Encoding.Unicode正在呼叫公共财产。 这条线错了:

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

如果查看Enum.Parse,您会看到第一个参数应该是enumType,而您传递的是完全不同的对象。