【问题标题】:Using reflection to find interfaces implemented使用反射查找已实现的接口
【发布时间】:2010-12-03 22:06:51
【问题描述】:

我有以下情况:

public interface IPerson { .. }    
public class Person : IPerson { .. }    
public class User : Person { .. }

现在;如果我有一个“用户”对象 - 我如何检查这是否使用反射实现 IPerson?更准确地说,我有一个可能具有 SomeUser 属性的对象,该属性应该是实现接口“IPerson”的某种类型。就我而言,我实际上有一个用户,但这是我想通过反射检查的。我不知道如何检查属性类型,因为它是“用户”,但我想检查它是否实现 IPerson...:

var control = _container.Resolve(objType); // objType is User here
var prop = viewType.GetProperty("SomeUser");
if ((prop != null) && (prop.PropertyType is IPerson)) 
{ .. }

(注意这是我实际案例的简化,但重点应该是一样的……)

【问题讨论】:

  • 如果你已经有一个对象实例,你不需要反射来检查你的对象是否实现了某个接口。您可以简单地检查if (objUser is IPerson)
  • 0xA3的评论不是正确答案吗?

标签: c# .net reflection


【解决方案1】:

检查Type.IsAssignableFrom 方法。

【讨论】:

    【解决方案2】:
    var control = _container.Resolve(objType); 
    var prop = viewType.GetProperty("SomeUser");
    if ((prop != null) && (prop.PropertyType.GetInterfaces().Contains(typeof(IPerson))) 
    { .. }
    

    【讨论】:

    • 谢谢,但我想我会选择 Type.IsAssignableFrom。
    • Type.IsAssignableFrom 实际上在 LINQ 表达式中返回错误,而它本应为真。这个 Type.GetInterfaces().Contains([Interface Type]) 有效。
    【解决方案3】:
    猜你喜欢
    • 2023-03-03
    • 2015-10-21
    • 2011-09-18
    • 1970-01-01
    • 2021-09-26
    • 2010-09-09
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多