下面是我的程序代码:using System;
using System.Reflection;
using UNGou.ERP.Model;
namespace ConsoleApplication9
{
    class OrderInfo
    {
        private string _AddName;
        public string AddName
        {
            get { return _AddName; }
            set { _AddName = value; }
        }
    }        class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            OrderInfo oi = new OrderInfo();
            oi.AddName = "某甲";            test(oi);
            System.Console.WriteLine("添加者为:" + oi.AddName);
         
        }
        public static void test(object obj)
        {
            Type type = obj.GetType();
            object objs = type.InvokeMember(null, BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);            type.InvokeMember("AddName", BindingFlags.SetProperty | BindingFlags.Instance, null, objs, new string[] { "某乙" });
            //type.InvokeMember("Addname", BindingFlags.SetProperty | BindingFlags.Instance|BindingFlags.IgnoreCase, null, objs, new string[] { "某乙" });
            //type.InvokeMember("Addname", BindingFlags.SetField | BindingFlags.Instance | BindingFlags.IgnoreCase, null, objs, new string[] { "某乙" });
        }    }
}我要求达到的功能是:通过反射,设置oi对象的AddName属性(无启用忽略大小写标志也没有用)为"某乙",程序运行时,总是出现"未找到方法,或者是未找到字段",大侠帮忙下.

解决方案 »

  1.   

    type.InvokeMember("AddName", BindingFlags.SetProperty  ¦ BindingFlags.Instance, null, objs, new string[] { "某乙" }); 这句应该有问题!
      

  2.   


            public static void test(object obj) 
            { 
                Type type = obj.GetType(); 
                type.InvokeMember("AddName", BindingFlags.SetProperty, null, obj, new string[] { "某乙" }); 
            } 
      

  3.   

    同上。
    type.InvokeMember("AddName", BindingFlags.SetProperty  ¦ BindingFlags.Instance, null, obj, new string[] { "某乙" }); 
    应该就可以了。
      

  4.   

    呵,按照2楼的意见,是可以了,可是如果我只知道这个属性的名称,不知道大小写.比如
     type.InvokeMember("addname", BindingFlags.SetProperty | BindingFlags.IgnoreCase, null, obj, new string[] { "某乙" });要如何实现.谢谢
      

  5.   

    objs 是不是为null?可能创建对象的时候就失败了
      

  6.   

    trytype.InvokeMember("addname", BindingFlags.Public |BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.SetProperty ,null ,obj ,new string[] { "某乙" }); 
      

  7.   

    赋值:
    1.获取用户的成员
    2.调用成员的SetValue方法赋值
    建议你访问Members
    看看所有成员的列表