C#类型转换器长到枚举类型在ChangeType上失败

C#类型转换器长到枚举类型在ChangeType上失败,c#,.net,enums,typeconverter,changetype,C#,.net,Enums,Typeconverter,Changetype,我对C#和.NET相当陌生-我正在尝试将整数转换为枚举。转换必须可以由ChangeType执行(在我下面的演示之外,这是固定的,因为它在数据绑定框架内),并且从我读到的内容来看,它应该与我正在做的工作一起工作,但是我得到了一个异常,如果我在转换类的函数中放置断点,则不会调用任何东西 提前谢谢-马修 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C

我对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转换就可以了

我不确定您使用的是哪种绑定框架,但对于enum来说,它走这条路似乎有些奇怪


很抱歉,我无法提供更多帮助。

谢谢-我已经修改了,但不幸的是,我仍然在最后一行(代码)中得到了InvalidCastException:-(更新了答案。我以前只看了TypeConverter问题。我没有看你真正想做什么。希望新答案更有用。迈克,再次感谢你的帮助。不幸的是,我无法控制转换的方式。我有一个数据库,其中包含一个字段,其中包含我的en的数字表示um值(Int64),它被数据绑定到LengthUnits类型的属性。如果我什么都不做,它根本不起作用,如果我向绑定中添加一个格式处理程序,那么我可以用这种方式处理事情,但必须对每个控件都这样做(在设计时不可行)。我真正想要的是让数据绑定从Int32类型的字段成功地工作到LengthUnits类型的属性:-sShould add-在数据绑定中生成的异常在调用ChangeType()之后,因此,我在我的缩小示例中尝试使用它。谢谢迈克-你实际上帮了我很多忙,因为我现在知道我在这条路线上走到了死胡同。我也很困惑,为什么在演员阵容良好的情况下,数据绑定会出问题……必须找到一些解决办法(也许可以添加一个int类型的代理属性来更新另一个有点混乱的属性,但可以保存它!)干杯,Matthew。