저는 C#과 .NET에 대해 매우 익숙합니다. 정수에서 열거 형으로 작업하도록 변환하려고합니다. 변환은 ChangeType에서 수행 할 수 있어야합니다 (아래의 데모는 데이터 바인딩 프레임 워크 내에서 고정되어 있습니다). 그리고 내가 읽은 것에서는 내가하고있는 일과 함께 작동해야하지만, 예외가 발생합니다. 내 변환 클래스의 함수에서 중단 점이 있으면 아무 것도 호출되지 않습니다.C# TypeConverter는 열거 형 타입으로 길어질 때 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));
}
}
}
감사합니다.하지만 불행히도 마지막 (코드) 줄에 InvalidCastException이 표시됩니다 .-( –
대답이 업데이트되었습니다. 전에 TypeConverter 문제 만 보았습니다. 보지 못했습니다. 당신이 정말로하려고했던 일입니다. 새로운 대답이 도움이 되었기를 바랍니다. –
마이크, 도움을 다시 주셔서 감사합니다. 불행히도, 나는 변환이 어떻게 이루어지는지를 제어하지 못합니다. LengthUnits 형식의 속성에 데이터 바인딩되는 내 열거 형 값 (Int64)의 숫자 표현 아무 것도하지 않으면 바인딩에 Format 처리기를 추가하면 작동하지 않습니다. 그런 식으로 모든 단일 컨트롤에 대해 그렇게해야합니다 (디자인 타임에는 수행 할 수 없음) 필자가 정말로 원했던 것은 데이터 바인딩을 통해 Int32 유형의 필드에서 LengthUnits 유형의 속성으로 작업하는 것입니다. -s –