Frage

Ich bin ziemlich neu in C # und .NET - Ich versuche, eine Enumeration aus einer ganzen Zahl Umwandlung zur Arbeit zu kommen. Die Umwandlung muss von Change aufführbar sein (darunter außerhalb meiner Demo ist festgelegt, wie es in den Daten verbindlichen Rahmen ist) und von dem, was ich gelesen habe, sollte es mit arbeiten, was ich tue, aber ich eine Ausnahme erhalten, und wenn ich Platz Haltepunkte in den Funktionen meiner Bekehrung Klasse, wird nichts jemals genannt.

Vielen Dank im Voraus! -Matthäus.

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

        }
    }
}
War es hilfreich?

Lösung

Ausgehend von früheren Antworten über

Convert.ChangeType nicht die Mühe Blick auf den Typeconverter, so dass keine Hilfe ist. Reflektor zu sehen Convert.ChangeType Verwenden es sieht aus wie es nicht funktionieren. Es hat eine statische Karte von Dingen, die es zu konvertieren. Wenn es nicht in dieser Liste ist, wird es nicht versuchen und zu konvertieren. Das ist lustig, weil ein gerade gegossenen ein int oder lang auf Ihre Enum wird nur Arbeit.

Ich bin sicher nicht die verbindlichen Rahmen Sie verwenden, aber es scheint seltsam, dass es für Aufzählungen diesen Weg gehen würde.

Es tut mir leid ich nicht mehr helfen konnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top