Pregunta

Soy bastante nuevo en C # y .NET - Estoy intentando conseguir la conversión a trabajar a partir de un entero a una enumeración. La conversión debe ser realizable por changetype (fuera de mi demo debajo de este se fija, ya que es en el marco de enlace de datos) y por lo que he leído se debe trabajar con lo que estoy haciendo, pero me da una excepción y si escribo puntos de interrupción en las funciones de conversión de mi clase, nunca nada es llamado.

Gracias de antemano! Mateo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace csharptest
{
    class Program
    {

        [TypeConverter(typeof(UnitEnumConverter))]
        public enum LengthUnits
        {
            METRES,
            FEET
        };

        public class UnitEnumConverter : EnumConverter
        {
            public UnitEnumConverter(System.Type type)
                : base(type.GetType())
            {
            }

            public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
            {
                if (sourceType == typeof(Int64)) return true;

                return base.CanConvertFrom(context, sourceType);
            }

            public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                if (value is Int64)
                {
                    return (LengthUnits)(Int64)value;
                }
                return base.ConvertFrom(context, culture, value);
            }
        }

        static void Main(string[] args)
        {
            LengthUnits units = new LengthUnits();

            long x = 1;

            units = (LengthUnits)System.Convert.ChangeType(x, typeof(LengthUnits));

        }
    }
}
¿Fue útil?

Solución

A partir de las respuestas anteriores sobre

Convert.ChangeType no se molesta en buscar la TypeConverter de manera que no es ninguna ayuda. El uso del reflector para mirar Convert.ChangeType simplemente parece que no va a funcionar. Tiene un mapa estático de las cosas que puede convertir a. Si no está en esa lista no va a tratar de convertir. Esto es curioso, porque un reparto lineal de un int o un largo a su enumeración se acaba de trabajar.

No estoy seguro de qué marco vinculante que está utilizando, pero parece extraño que sería ir por este camino para enumeraciones.

Lo siento, no podía ser de más ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top