C#と.NETの新機能です。整数から列挙型への変換を試みています。変換はChangeTypeで実行可能でなければなりません(私のデモの外はデータバインディングフレームワーク内で固定されています)。読み込んだ内容から、私がやっていることと一緒に動作するはずですが、例外があります。私の変換クラスの関数内のブレークポイントは、何も呼び出されません。C#TypeConverterのlong型からenum型への変換が失敗します。
ありがとうございます!マーティー
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を取得しています:-( –
答えを更新しました。 –
Mike、もう一度あなたの助けをありがとうございます。残念ながら、私は変換がどのように行われているのかはわかりません。 LengthUnits型のプロパティにデータバインドされている私のenum値(Int64)の数値表現 何もしなければ、単純に機能しません。バインディングにFormatハンドラを追加すると、その方法ではなく、すべての単一のコントロールに対して行う必要があります(設計時には実行できません)。 私が本当に欲しいのは、データ型バインドを取得して、Int32型のフィールドからLengthUnits型のプロパティに正しく機能することです。-s –