Question

Je suis assez nouveau pour C # et .NET - Je suis en train de faire la conversion à travailler à partir d'un entier à un ENUM. La conversion doit être performable par ChangeType (en dehors de ma démo ci-dessous c'est fixé comme il est dans les données cadre de liaison) et de ce que je l'ai lu devrait travailler avec ce que je fais, mais je reçois une exception et si je place points d'arrêt dans les fonctions de ma classe de conversion, rien ne se jamais appelé.

Merci d'avance! -Matthieu.

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

        }
    }
}
Était-ce utile?

La solution

À partir de réponses précédentes sur

Convert.ChangeType ne dérangera pas regarder le TypeConverter de sorte que l'aide est pas. En utilisant réflecteur à regarder Convert.ChangeType il semble tout comme il ne fonctionnera pas. Il a une carte statique des choses qu'il peut convertir. Si ce n'est pas dans cette liste, il ne sera pas essayer de convertir. C'est drôle parce qu'un casting d'un droit int ou long à votre ENUM simplement travailler.

Je ne suis pas sûr de cadre contraignant que vous utilisez, mais il semble étrange que ça irait dans cette voie pour les énumérations.

Je suis désolé, je ne pouvais pas être plus utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top