سؤال

أنا جديد إلى حد ما على 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 أو طويلة لتعدادك سوف تعمل فقط.

لست متأكدًا من إطار الربط الذي تستخدمه ، لكن يبدو من الغريب أنه سيسقط في هذا الطريق للتعداد.

أنا آسف لأنني لم أستطع أن أكون مزيد من المساعدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top