typeof(interface).IsAssignableFrom(intptr) returns true

本文关键字:returns true intptr IsAssignableFrom typeof interface | 更新日期: 2023-09-27 18:18:21

我需要遍历实现接口的所有属性,并且我有一个传递IsAssignableFrom条件的IntPtr属性。

是否有其他方法来检查一个属性是否实现了接口?

这个方法遍历属性:

protected void SetOwner()
{
    IEnumerable<PropertyInfo> sourceProperties = this.GetType().GetProperties();
    foreach (PropertyInfo pi in sourceProperties)
    {
        if (pi.Name != "Owner" && pi.DeclaringType.GetInterface("IOwnerSystem") != null)
        //i tried this too: typeof(IOwnerSystem).IsAssignableFrom(pi.DeclaringType))
        {
            IOwnerSystem systm = (IOwnerSystem)pi.GetValue(this, null);
            if (systm != null)
            {
                systm.Owner = this;
            }
        }
    }
}

,这是类:

public abstract class Aircraft : OwnerSystem
{
   //a bunch of properties...
    public abstract IntPtr VideoWindow { get; }
}

typeof(interface).IsAssignableFrom(intptr) returns true

pi.DeclaringType是声明属性的类型,不是属性的类型。在您的例子中,DeclaringTypeAircraft或它的一个基类。您应该使用pi.PropertyType