我正在尝试找出一种方法,将文件的编码存储在数据库中,以便能够将其恢复为原始类型(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)不返回枚举类型?提前感谢您提供的任何帮助。
发布于 2012-05-05 01:19:49
不,它不是枚举。它是一个具有静态属性的类。如下所示:
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-05 01:20:28
没错。右键单击,转到定义,显示编码的定义如下:
public abstract class Encoding : ICloneable发布于 2012-05-05 01:20:38
Encoding是一个类而不是枚举。调用Encoding.Unicode就是调用公共属性。这一行是错误的:
Encoding enc = (Encoding) Enum.Parse(typeof(Encoding), o.ToString()); 如果您查看Enum.Parse,您将看到第一个参数应该是enumType,并且您传递的是完全不同的对象。
https://stackoverflow.com/questions/10453309
复制相似问题