2010-12-02 46 views

回答

42

沒有,is只能用於檢查對象的類型,而不是一個給定Type。你想要Type.IsAssignableFrom

if (attr != null && typeof(IInterface).IsAssignableFrom(type)) 

請注意這裏的順序。我發現我差不多總是使用typeof(...)作爲目標的調用。基本上,要使其返回true,目標必須是「父」類型,參數必須是「子」類型。

2

嗨 您可以使用type.GetInterfaces() or type.GetInterface()來獲取類型實現的接口。

0

給定最壞的情況;

如果您使用了在類的所有屬性反射...

public List<PropertyInfo> FindProperties(Type TargetType) { 

    MemberInfo[] _FoundProperties = TargetType.FindMembers(MemberTypes.Property,   
    BindingFlags.Instance | BindingFlags.Public, new 
    MemberFilter(MemberFilterReturnTrue), TargetType); 

    List<PropertyInfo> _MatchingProperties = new List<PropertyInfo>(); 

    foreach (MemberInfo _FoundMember in _FoundProperties) { 
    _MatchingProperties.Add((PropertyInfo)_FoundMember); } 

    return _MatchingProperties; 

} 

IInterface是一些通用接口

public void doSomthingToAllPropertiesInDerivedClassThatImplementIInterface() { 

     IList<PropertyInfo> _Properties = FindProperties(this.GetType()); 
     foreach (PropertyInfo _Property in _Properties) 
     { 

      if (_Property.PropertyType.GetInterfaces().Contains(typeof(IInterface))) 
      { 
       if ((IInterface)_Property.GetValue(this, null) != null) 
       { 
         ((IInterface)_Property.GetValue(this, null)).SomeIInterfaceMethod(); 
       } 
      } 
     } 
    } 
相關問題