有以下语句
oc.t300km.First(p => p.id == 1).spec = "3CCCC";
请问现在在仅知道oc这个对象,要用反射的方法设置spec的值应该怎么做?

解决方案 »

  1.   

    First(p => p.id == 1)这个方法....
    是First(int pid)?
      

  2.   

    To:zgke  
    First的定义
    public static TSource First<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, bool> predicate
    )
      

  3.   

    不懂 p => p.id == 1 啊  是不是取oc.t300km.First().id为1 所有的啊
      

  4.   

    那是个lambda表达式,其实就是一个匿名方法
    与delegate (p的类型 p) { return p.id == 1;}是一样的
      

  5.   

    晕了,讨论我的问题,怎么去讨论lambda表达式了?
      

  6.   

    oc.t300km.First(p => p.id == 1).spec = "3CCCC"; 你获取t300km 然后获取方法 First 然后调用方法 (true false) 获得结果 在结果里.GetType().Get属性或则成员 3PEC设置对象为"3CCCC",不能这样做吗?
      

  7.   

    To:zgke 
      没你说的那么简单的。lambda表达是怎么反射?lambda表达式也没办法动态创建.
      

  8.   

    我就知道这个复杂~~
    我在想能不能用
    Microsoft.CSharp;
    System.CodeDom.Compiler;
    把lambda放这里运行..然后获取结果 再回来反射呢?
      

  9.   

    oc.t300km.First(p => p.id == 1).spec = "3CCCC"; 
    oc.t300km指的是一个列表之类的对象
    oc.t300km.First(p => p.id == 1)是从列表对象中取出了符合条件的第一个
    oc.t300km.First(p => p.id == 1).spec给取出来的对象的spec属性赋值
    ==========
    现在问题是不知道你要反射到什么程度呢?
      

  10.   

    http://tech.ddvip.com/2008-11/122700112893306_3.htmlusing System;
    using System.Reflection;
    &nb
     namespace ConsoleApplication9
    {
      class Love
      {
        public int field1;
        private string _name;
        public Love()
        {
        }
        public string Name
        {
          get
          {
            return _name;
    }
          set
          {
            _name=value;
          }
        }
        public int GetInt(int a)
        {
          return a;
        }
        public void Display(string str)
        {
          Console.WriteLine(str);
        }
      }
      /// <summary>
      /// Class1 的摘要说明。
      /// </summary>
      class Class1
      {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
          //
          // TODO: 在此处添加代码以启动应用程序
          //
          Love love = new Love();
          Type type = love.GetType();
          Object obj = type.InvokeMember(null,
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
          //调用没有返回值的方法
          type.InvokeMember("Display",BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance , null , obj , new object[]{"aldfjdlf"});
          //调用有返回值的方法
          int i = (int)type.InvokeMember("GetInt",BindingFlags.InvokeMethod | BindingFlags#0000cc">.Public | BindingFlags.Instance,null,obj,new object[]{1});
    Console.WriteLine(i);
          //设置属性值
          type.InvokeMember("Name",BindingFlags.SetProperty,null,obj,new string[]{"abc"});
          //获取属性值
          string str=(string)type.InvokeMember("Name",BindingFlags.GetProperty,null,obj,null);
          Console.WriteLine(str);
          //设置字段值
          type.InvokeMember("field1",BindingFlags.SetField,null,obj,new object[]{444});
          //获取字段值
          int f=(int)type.InvokeMember("field1",BindingFlags.GetField,null,obj,null);
          Console.WriteLine(f);
          Console.ReadLine();
        }
      }
    }
      

  11.   


    反射程度是:
    1.仅知道oc这个对象
    2.另外还知道"p=>p.id==1"这个字符串,注意是字符串现在要修改spec的值