在ChangeType上,C#TypeConverter long to enum type失败

时间:2009-09-04 11:28:26

标签: c# .net enums typeconverter changetype

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

        }
    }
}

1 个答案:

答案 0 :(得分:3)

从以前的答案开始

Convert.ChangeType不会打扰看TypeConverter,所以没有帮助。使用Reflector查看Convert.ChangeType,看起来它不起作用。它有一个可以转换为的静态事物映射。如果它不在该列表中,则不会尝试转换。这很有趣,因为对你的枚举直接演绎int或long会起作用。

我不确定你使用的绑定框架是什么,但它似乎很奇怪它将沿着这条路线进行枚举。

对不起,我无法提供更多帮助。