これは、リフレクションで値を変換する場合のフォローアップです。this question別の型に特定のタイプのオブジェクトを変換するには、次のように行うことができます。Convert.ChangeTypeが2つのタイプの間で動作するかどうかをテストしてください
object convertedValue = Convert.ChangeType(value, targetType);
考えると2タイプのインスタンス(FromTypeとToType言う)、変換が成功するかどうかをテストする方法はありますか?
など。
public static class TypeExtensions
{
public static bool CanChangeType(this Type fromType, Type toType)
{
// what to put here?
}
}
EDIT:これは私が今持っているものです。最後に
ConvertTypes = new Type[] {
typeof(Empty), typeof(object), typeof(DBNull), typeof(bool), typeof(char), typeof(sbyte), typeof(byte), typeof(short), typeof(ushort), typeof(int), typeof(uint), typeof(long), typeof(ulong), typeof(float), typeof(double), typeof(decimal),
typeof(DateTime), typeof(object), typeof(string)
};
、この方法:私は静的コンストラクタで、この発見リフレクタでメソッドConvert.ChangeTypeをチェック醜いが、私はまだ別の方法を見ていない...
bool CanChangeType(Type sourceType, Type targetType)
{
try
{
var instanceOfSourceType = Activator.CreateInstance(sourceType);
Convert.ChangeType(instanceOfSourceType, targetType);
return true; // OK, it can be converted
}
catch (Exception ex)
{
return false;
}
ええ、私はConvert.TryChangeTypeメソッドが好きでしょう... –
@トーマス:それはいいですが、それは私がここに必要なものではありません。私はまだfromTypeのインスタンスを持っていません。ただタイプ自体です。 – jeroenh
確かに確かめることができるのは、fromTypeが 'IConvertible'を実装していると思いますが、実際に成功した変換は保証されません。 – LukeH