【发布时间】:2009-09-09 12:04:18
【问题描述】:
这是this question 关于使用反射转换值的后续内容。将某种类型的对象转换为另一种类型可以这样完成:
object convertedValue = Convert.ChangeType(value, targetType);
给定两个 Type 实例(比如 FromType 和 ToType),有没有办法测试转换是否成功?
例如我可以写一个这样的扩展方法吗:
public static class TypeExtensions
{
public static bool CanChangeType(this Type fromType, Type toType)
{
// what to put here?
}
}
编辑:这就是我现在所拥有的。丑,但我还没有看到其他方法......
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 方法...
-
@Thomas:那很好,但这并不是我在这里所需要的。我还没有 fromType 的实例,只有 Type 本身。
-
我认为您可以可靠检查的是 fromType 实现了
IConvertible,但这并不能保证任何尝试的转换都会成功。 -
我现在正在对通过 Activator.CreateInstance.Ugly 创建的实例执行实际的 ChangeType 方法,但目前我看不到其他方法...
标签: c# reflection