Domanda

Sono abbastanza nuovo per C # e .NET - Sto cercando di ottenere la conversione di lavorare da un intero ad un enum. La conversione deve essere eseguibile da ChangeType (al di fuori del mio demo di sotto di questo è stato risolto in quanto è all'interno dei dati quadro vincolante) e da quello che ho letto dovrebbe funzionare con quello che sto facendo, ma ottengo un'eccezione e se ho posto punti di interruzione nelle funzioni della mia classe di conversione, nulla mai viene chiamato.

Grazie in anticipo! Matteo.

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

        }
    }
}
È stato utile?

Soluzione

Si riparte dalle risposte precedenti

Convert.ChangeType non preoccuparsi guardando il TypeConverter in modo che non è di aiuto. Utilizzando riflettore a guardare Convert.ChangeType sembra proprio come non funzionerà. Ha una mappa statica delle cose che si può convertire in. Se non è in tale elenco non sarà cercare di convertire. Questo è divertente perché un cast rettilineo di un int o una lunga al vostro enum sarà solo di lavoro.

Non sono sicuro di quale vincolante quadro che si sta utilizzando, ma sembra strano che sarebbe andata giù questa strada per le enumerazioni.

Mi dispiace non ho potuto essere di maggiore aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top