编码不是枚举
本文关键字:枚举 编码 | 更新日期: 2023-09-27 18:33:08
我正在尝试找出一种方法将文件的编码存储在数据库中,然后能够将其检索回其原始类型(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());
}
}
}
我在解析行中得到的异常说:
Type provided must be an Enum.
Parameter name: enumType
所以,基本上据我所知,告诉我typeof(Encoding)
不返回枚举类型?提前感谢您提供的任何帮助。
不,它不是枚举。它是一个具有静态属性的类。像这样:
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)
获取编码。
没
错。右键单击,转到定义显示编码是这样定义的:
public abstract class Encoding : ICloneable
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 */);
这可能不是存储不同编码数据的合理策略......但是,我不知道你在大局上到底要做什么。
Encoding
是一个类而不是枚举。调用Encoding.Unicode
是调用公共属性。这一行是错误的:
Encoding enc = (Encoding) Enum.Parse(typeof(Encoding), o.ToString());
如果你看一下 Enum.Parse,你会看到第一个参数应该是 enumType,并且你传递的是完全不同的对象。