C#のTypeConverterは長い列挙型への変更タイプに失敗しました
-
21-09-2019 - |
質問
私はC#と.NETにかなり新たなんだ - 私は、列挙型の整数から仕事への変換を取得しようとしています。私はそれは私がやっているで動作するはずです何を読んでから(それがデータバインディング枠組みの中だとして固定されている。この下の私のデモの外)変換が変更タイプによって実行可能でなければなりませんが、私は例外と場合を取得し、私の場所私の変換クラスの機能にブレークポイントは、何も今までに呼び出されません取得します。
事前に感謝します! - マタイます。
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を見て気にしないだろう。それは動作しませんようにConvert.ChangeTypeでそれを見て反射板を使用することだけに見えます。それはに変換することができ、物事の静的なマップを持っています。それはそのリストにない場合、それは試してみて、変換しません。あなたの列挙型にintまたはlongのまっすぐなキャストがうまく動作しますので、これは面白いです。
私はあなたが使用しているバインディング・フレームワークではないんだけど、それは列挙型のためにこのルートを下るだろうと奇妙に思えるます。
私は、私はより多くの助けになることができませんでしたごめんなさいます。
所属していません StackOverflow