Rop*_*tah 3 c# reflection inheritance
我正在尝试检查对象是否可以使用转换为某种类型IsAssignableFrom.但是我没有得到预期的结果...... 我在这里错过了一些东西吗?
//Works (= casts object)
(SomeDerivedType)factory.GetDerivedObject();
//Fails (= returns false)
typeof(SomeDerivedType).IsAssignableFrom(factory.GetDerivedObject().GetType());
Run Code Online (Sandbox Code Playgroud)
编辑:
上面的例子似乎错了,并没有很好地反映我的问题.
我DerivedType在代码中有一个对象,它被强制转换为BaseType:
BaseType someObject = Factory.GetItem(); //Actual type is DerivedType
Run Code Online (Sandbox Code Playgroud)
我也有一个PropertyType反思:
PropertyInfo someProperty = entity.GetType().GetProperties().First()
Run Code Online (Sandbox Code Playgroud)
我想,以检查是否someObject是分配给(浇注到)PropertyType的someProperty.我怎样才能做到这一点?
当你有
class B { }
class D : B {}
Run Code Online (Sandbox Code Playgroud)
然后
typeof(B).IsAssignableFrom(typeof(D)) // true
typeof(D).IsAssignableFrom(typeof(B)) // false
Run Code Online (Sandbox Code Playgroud)
我认为你正在尝试第二种形式,但并不完全清楚.
最简单的答案可能是测试:
(factory.GetDerivedObject() as SomeDerivedType) != null
Run Code Online (Sandbox Code Playgroud)
编辑后:
你想知道的是,如果someObject可以分配给SomeProperty但是它是可转换的.
基础是:
bool ok = someProperty.PropertyType.IsInstanceOfType(someObject);
Run Code Online (Sandbox Code Playgroud)
但这只处理继承.