欢迎光临
我们一直在努力

使用反射依导航路径调用对象成员方法,或返回对象子、孙属性或字段成员-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请包含本声明
///作者: csdn网名alias88,邮件:alias88@163.com,qq:63343 ,欢迎加我

    /// <summary>

    ///依导航路径调用对象成员方法,或返回对象其子、孙属性或字段成员.

///例子:

///获得表的第二列的名称

///getmember(datatable1.gettype(),"columns.item.name",datatable1,1)     

///执行表的select方法,并返回可能的datarow数组

///getmember(datatable1.gettype(),"select",datatable1,"客户编号 = c0001)

///取活动表单的名称,静态成员不需传入obj

///getmember(typeof("system.windows.forms.form"),"activeform.name",null,null)

    /// </summary>

    /// <param name="type">获得此类型的子孙成员</param>

    /// <param name="memberpath">子孙成员的路径描述,以点作为分隔符</param>

    /// <param name="obj">如果成员是静态类型,则为null</param>

    /// <param name="args">参数,注意此参数只能为memberpath最后一个成员使用</param>

    /// <returns></returns>

    public static object getmember(type type,string memberpath,object obj,object[] args)

    {

      if (memberpath==null || memberpath.trim ()=="")

        throw new argumentexception ("缺少必需的参数","memberpath");

      if (type==null )

        throw new argumentexception ("缺少必需的参数","type");

 

      type _objecttype=type;

      object _object=obj;

 

      object[] paras=null;

      string[] strmember=memberpath.split (.);

      for (int i=0; i<strmember.length  ;i++)

      {

        string membername=strmember[i];

        if (i>=strmember.length-1 )

          paras=args;

          

        _object = _objecttype.invokemember(membername,

          bindingflags.public | bindingflags.nonpublic |

          bindingflags.instance | bindingflags.static |

          bindingflags.getfield |  bindingflags.getproperty |

          bindingflags.invokemethod | bindingflags.ignorecase ,

          type.defaultbinder,  _object, paras);

 

        if (_object!=null)

          _objecttype=_object.gettype ();

        else if (i<strmember.length-1)

          throw new argumentnullexception(membername);

      }

      return _object;

    }

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用反射依导航路径调用对象成员方法,或返回对象子、孙属性或字段成员-.NET教程,Asp.Net开发
分享到: 更多 (0)