C#检查对象是否可以转换为另一个对象失败?

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分配给(浇注到)PropertyTypesomeProperty.我怎样才能做到这一点?

Hen*_*man 5

当你有

 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)

但这只处理继承.