C# TypeConverter Long to Enum Type falha no ChangeType
-
21-09-2019 - |
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));
}
}
}
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.