我正在试图找出一种方法来将文件的编码存储在数据库中,然后能够将其检索回原始类型(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类型?
提前感谢您提供的任何帮助。
答案 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.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 */);
这对于存储不同编码的数据可能不是一个合理的策略......但是,我不确切地知道你在大局中要完成的工作。 < /子>
答案 3 :(得分:1)
Encoding
是一个类而不是枚举。呼叫Encoding.Unicode
正在呼叫公共财产。
这条线错了:
Encoding enc = (Encoding) Enum.Parse(typeof(Encoding), o.ToString());
如果查看Enum.Parse,您会看到第一个参数应该是enumType,而您传递的是完全不同的对象。