在 .net (C#) 中,如果通过反射发现了两种类型,是否可以确定一种类型是否可以转换为另一种类型? (隐式和/或显式)。
我想做的是创建一个库,允许用户指定将一种类型的属性映射到另一种类型的属性。如果这两个属性具有匹配的类型,一切都很好,但我希望能够允许它们映射可以使用隐式/显式转换的属性。所以如果他们有
class from
{
public int IntProp{get;set;}
}
class to
{
public long LongProp{get;set;}
public DateTime DateTimeProp{get;set;}
}
他们可以说 from.IntProp 将被分配给 to.LongProp(因为存在隐式转换)。但如果他们说它映射到 DateTimeProp,我就能够确定没有可用的转换并抛出异常。
最佳答案
public static bool HasConversionOperator( Type from, Type to )
{
Func<Expression, UnaryExpression> bodyFunction = body => Expression.Convert( body, to );
ParameterExpression inp = Expression.Parameter( from, "inp" );
try
{
// If this succeeds then we can cast 'from' type to 'to' type using implicit coercion
Expression.Lambda( bodyFunction( inp ), inp ).Compile();
return true;
}
catch( InvalidOperationException )
{
return false;
}
}
这应该可以实现隐式和显式转换(包括数字类型、类等)
关于c# - 确定反射类型是否可以转换为另一个反射类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/292437/