2012-05-04 17 views
5

Estoy tratando de encontrar una forma de almacenar la codificación de un archivo en una base de datos para luego poder recuperarlo en su tipo original (System.Text.Encoding). Pero estoy obteniendo un error que no entiendo.¿La codificación no es una enumeración?

Como prueba, he creado este pequeño programa para reproducir el error:

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()); 
     } 
    } 
} 

La excepción consigo en la línea de Parse dice:

Type provided must be an Enum. 
Parameter name: enumType 

Así que, básicamente, por lo que yo entiendo me está diciendo que typeof(Encoding) no devuelve un tipo Enum? Gracias de antemano por cualquier ayuda brindada.

+0

Gracias a todos por sus respuestas. Cambié a esto: --- 'object o = Encoding.Unicode.CodePage; Encoding enc = Encoding.GetEncoding (int.Parse (o.ToString())); ' –

Respuesta

12

No, no es una enumeración. Es una clase con propiedades estáticas. Algo como esto:

public class Encoding 
{ 
    public static Encoding ASCII 
    { 
     get 
     { 
      //This is purely illustrative. It is not actually implemented like this 
      return new ASCIIEncoding(); 
     } 
    } 
} 

Si desea almacenar la codificación de la base de datos, almacenar la página de códigos:

int codePage = SomeEncoding.CodePage; 

Y el uso de Encoding.GetEncoding(theCodePage) para obtener la codificación.

+0

Veo, gracias y + felicitaciones para ti :) –

2

Correcto. Haga clic derecho, ir a la definición muestra que la codificación se define así:

public abstract class Encoding : ICloneable 
1

Encoding es una clase y no la enumeración. Llamar al Encoding.Unicode llama a una propiedad pública. Esta línea está mal:

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

Si nos fijamos en Enum.Parse verá que el primer parámetro debe ser enumType y está de paso de objetos totalmente diferente.

1

Encoding.Unicode y son propiedades de solo lectura estáticas de la clase Encoding. No son miembros de enum.

en su lugar podría almacenar el CodePage de la codificación en la base de datos, y recuperarlo utilizando Encoding.GetEncoding:

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

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

esto puede no ser una buena estrategia para almacenar datos de diferentes codificaciones ... sin embargo, No sé exactamente para qué trabajas en el panorama general.

+0

Gracias, sí, pensé que ese era el camino –

Cuestiones relacionadas