Вопрос

Я новичок в C# и .NET - я пытаюсь заставить работать преобразование целого числа в перечисление.Преобразование должно быть выполнено с помощью ChangeType (за пределами моей демонстрации ниже это исправлено, поскольку оно находится в рамках структуры привязки данных), и, судя по тому, что я прочитал, оно должно работать с тем, что я делаю, но я получаю исключение, и если я помещаю точки останова в функциях моего класса преобразования, ничего не вызывается.

Заранее спасибо!-Мэтью.

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

        }
    }
}
Это было полезно?

Решение

Начну с предыдущих ответов

Convert.ChangeType не будет проверять TypeConverter, так что это бесполезно.Используя Reflector для просмотра Convert.ChangeType, похоже, что это не сработает.У него есть статическая карта вещей, во которые он может конвертироваться.Если его нет в этом списке, он не будет пытаться преобразовать.Это забавно, потому что прямое приведение int или long к вашему перечислению будет работать.

Я не уверен, какую структуру привязки вы используете, но кажется странным, что для перечислений она пойдет по этому пути.

Мне жаль, что я не смог больше помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top