我是相当新的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的期待,这样是没有任何帮助。使用反射来看看Convert.ChangeType它只是看起来像它不会工作。它拥有的东西,它可以转换为静态地图。如果不在该列表中不会尝试转换。这是很有趣,因为一个int的直投或长到你的枚举将只是工作。

我不知道你正在使用的约束力的框架,但它似乎很奇怪,它会往下走枚举这条路线。

我很抱歉,我不能有更多的帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top