如何只将子类的名称作为字符串访问object.GetType()的子类属性

时间:2015-12-26 16:24:30

标签: c# inheritance model-view-controller reflection

我正在尝试组装一个泛型方法,它传递一个类类型的对象(即:dbJob),还有一个子类的名称,如'LastUpdatedDate'和一个进程字符串,它可以是'> 2015' 年1月1日。

该方法如下所示

public bool checkProcess(object obj, string className, string processStr)
{
    PropertyInfo[] propertyInfo;
    bool returnValue = false;
    propertyInfo = obj.GetType().GetProperties();
    //propertyInfo className evaluate processStr
    return returnValue; 
} 

我正在使用Reflection来获取我的班级的属性信息。假设我正在传递dbJob,我如何使用字符串说'LastUpdatedDate'作为子类来获取评估processStr的属性?

1 个答案:

答案 0 :(得分:0)

只需尝试将其as转换为该类型,如果成功可以强制转换,则从该实例类型中获取属性。

var subClass = obj as SubClass;
if ( subClass != null )
{
    var type = subClass.GetType();
    var props = type.GetProperties();
    ...
}

作为评论,如果您可以控制这些类,那么最好使用接口进行此类操作。

定义界面:

public interface IYourInterface 
{
   string SomeMethod();
}

在类上实现接口:(类可以根据需要实现尽可能多的接口)

public class YourSub : IYourInterface
{
   ... other methods/props ...

   public string SomeMethod()
   {
       return "blah";
   }
}

现在您可以将对象转换为该接口,如果它可以调用该方法。

var subClass = obj as IYourInterface;
if ( subClass != null )
{
    var str = subClass.SomeMethod();  //done
}