首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Encoding不是枚举吗?

Encoding不是枚举吗?
EN

Stack Overflow用户
提问于 2012-05-05 01:16:12
回答 3查看 4.3K关注 0票数 5

我正在尝试找出一种方法,将文件的编码存储在数据库中,以便能够将其恢复为原始类型(System.Text.Encoding)。但是我得到了一个我不理解的错误。

作为测试,我创建了这个小程序来重现这个错误:

代码语言:javascript
复制
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行中得到的异常是:

代码语言:javascript
复制
Type provided must be an Enum.
Parameter name: enumType

那么,据我所知,基本上是在告诉我typeof(Encoding)不返回枚举类型?提前感谢您提供的任何帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-05 01:19:49

不,它不是枚举。它是一个具有静态属性的类。如下所示:

代码语言:javascript
复制
public class Encoding
{
    public static Encoding ASCII
    {
         get
         {
             //This is purely illustrative. It is not actually implemented like this
             return new ASCIIEncoding();
         }
    }
}

如果您想将编码存储在数据库中,请存储代码页:

代码语言:javascript
复制
int codePage = SomeEncoding.CodePage;

并使用Encoding.GetEncoding(theCodePage)获取编码。

票数 12
EN

Stack Overflow用户

发布于 2012-05-05 01:20:28

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

代码语言:javascript
复制
public abstract class Encoding : ICloneable
票数 2
EN

Stack Overflow用户

发布于 2012-05-05 01:20:38

Encoding是一个类而不是枚举。调用Encoding.Unicode就是调用公共属性。这一行是错误的:

代码语言:javascript
复制
Encoding enc = (Encoding) Enum.Parse(typeof(Encoding), o.ToString()); 

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10453309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档