///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请包含本声明
///作者: CSDN网名alias88,邮件: [email protected] ,QQ:63343 ,欢迎加我
__
///
1<summary>
2
3/// 依导航路径调用对象成员方法,或返回对象其子、孙属性或字段成员.
4
5/// 例子 :
6
7/// 获得表的第二列的名称
8
9/// GetMember(dataTable1.GetType(),"Columns.Item.Name",dataTable1,1)
10
11/// 执行表的 Select方法,并返回可能的DataRow数组
12
13/// GetMember(dataTable1.GetType(),"Select",dataTable1,"客户编号 = 'C0001')
14
15/// 取活动表单的名称 ,静态成员不需传入obj
16
17/// GetMember(typeof("System.Windows.Forms.Form"),"ActiveForm.Name",null,null)
18
19/// </summary>
///
1<param name="type"/>
获得此类型的子孙成员
///
1<param name="memberPath"/>
子孙成员的路径描述,以点作为分隔符
///
1<param name="obj"/>
如果成员是静态类型,则为null
///
1<param name="args"/>
参数,注意此参数只能为memberPath最后一个成员使用
///
1<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
1<strmember.length (i="" ;i++)="" if="" membername="strMember[i];" string="" {="">=strMember.Length-1 )
2
3paras=args;
4
5_object = _objectType.InvokeMember(MemberName,
6
7BindingFlags.Public | BindingFlags.NonPublic |
8
9BindingFlags.Instance | BindingFlags.Static |
10
11BindingFlags.GetField | BindingFlags.GetProperty |
12
13BindingFlags.InvokeMethod | BindingFlags.IgnoreCase ,
14
15Type.DefaultBinder, _object, paras);
16
17if (_object!= null )
18
19_objectType=_object.GetType ();
20
21else if (i<strMember.Length-1)
22
23throw new ArgumentNullException(MemberName);
24
25}
26
27return _object;
28
29}</strmember.length>