I'm trying to check if an object can cast to a certain type using IsAssignableFrom
. However I'm not getting the expected results... Am i missing something here?
//Works (= casts object)
(SomeDerivedType)factory.GetDerivedObject();
//Fails (= returns false)
typeof(SomeDerivedType).IsAssignableFrom(factory.GetDerivedObject().GetType());
EDIT:
The above example seems wrong and doesn't reflect my problem very well.
I have a DerivedType
object in code which is cast to BaseType
:
BaseType someObject = Factory.GetItem(); //Actual type is DerivedType
I also have a PropertyType
through reflection:
PropertyInfo someProperty = entity.GetType().GetProperties().First()
I would like to check if someObject
is assignable to (castable to) the PropertyType
of someProperty
. How can I do this?
When you have
class B { }
class D : B {}
then
typeof(B).IsAssignableFrom(typeof(D)) // true
typeof(D).IsAssignableFrom(typeof(B)) // false
I think you are trying the 2nd form, it's not totally clear.
The simplest answer might be to test:
(factory.GetDerivedObject() as SomeDerivedType) != null
After the Edit:
What you want to know is not if someObject is assignable to SomeProperty but if it is castable.
The basis would be:
bool ok = someProperty.PropertyType.IsInstanceOfType(someObject);
But this only handles inheritance.
Try use
if (factory.GetDerivedObject() is SomeDerivedType)
{
//do
}
or
var tmp = factory.GetDerivedObject() as SomeDerivedType;
if (tmp != null)
{
//do
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With