Pergunta

Sou bastante novo em C# e .NET - estou tentando fazer a conversão trabalhar de um número inteiro para uma enumeração. A conversão deve ser executável pelo ChangeType (fora da minha demonstração abaixo, isso é corrigido, pois está dentro da estrutura de ligação de dados) e pelo que li, deve funcionar com o que estou fazendo, mas recebo uma exceção e se coloco pontos de interrupção nas funções da minha aula de conversão, nada é chamado.

Desde já, obrigado! -Mateus.

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

        }
    }
}
Foi útil?

Solução

Começando de respostas anteriores

O Convert.ChangeType não se incomodará em olhar para o TypeConverter, de modo que não é de ajuda. Usando o refletor para ver o Convert.CangeType, parece que não funcionará. Tem um mapa estático das coisas às quais pode se converter. Se não estiver nessa lista, ele não tentará converter. Isso é engraçado, porque um elenco reto de um INT ou um longo para a sua enumeração só funcionará.

Não tenho certeza de qual estrutura de ligação você está usando, mas parece estranho que ela percorre essa rota para enumes.

Lamento não poder ajudar mais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top