C# TypeConverter long 到枚举类型在 ChangeType 上失败

标签 c# .net enums typeconverter changetype

我对 C# 和 .NET 相当陌生 - 我正在尝试从整数到枚举的转换。转换必须可以通过 ChangeType 执行(在下面的演示之外,这是固定的,因为它在数据绑定(bind)框架内)并且从我读到的内容来看,它应该与我正在做的事情一起工作,但是我得到一个异常,如果我放置我的转换类的函数中的断点,没有任何内容被调用。

提前致谢! -马修。

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 它看起来不起作用。它有一个可以转换成的静态 map 。如果它不在该列表中,它将不会尝试进行转换。这很有趣,因为直接将 int 或 long 转换为枚举就可以了。

我不确定您正在使用哪个绑定(bind)框架,但它会沿着这条枚举路线走下去似乎很奇怪。

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

关于C# TypeConverter long 到枚举类型在 ChangeType 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1378687/

相关文章:

c# - 如何清除/删除文件 licenses.licx

c# - 无法转换类型为 'System.IO.BufferedStream' 的对象

c# - 将委托(delegate)作为方法参数传递

c# - 如何为采用泛型参数的泛型函数调用 GetMethod(不使用 GetMethods)?

jenkins 共享库错误 com.cloudbees.groovy.cps.impl.CpsCallableInvocation

C#:从文本文件中读取枚举

c# - C# 的 SortedBag<T>

c# - 如何使用 Win2D(行距)计算 FontFamily 的高度?

Delphi 指针、数组、句柄

c# - 是否可以将 Type 更改为给定类型?