请教一个反射的方法 有以下语句oc.t300km.First(p => p.id == 1).spec = "3CCCC";请问现在在仅知道oc这个对象,要用反射的方法设置spec的值应该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 First(p => p.id == 1)这个方法....是First(int pid)? To:zgke First的定义public static TSource First<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate) 不懂 p => p.id == 1 啊 是不是取oc.t300km.First().id为1 所有的啊 那是个lambda表达式,其实就是一个匿名方法与delegate (p的类型 p) { return p.id == 1;}是一样的 晕了,讨论我的问题,怎么去讨论lambda表达式了? oc.t300km.First(p => p.id == 1).spec = "3CCCC"; 你获取t300km 然后获取方法 First 然后调用方法 (true false) 获得结果 在结果里.GetType().Get属性或则成员 3PEC设置对象为"3CCCC",不能这样做吗? To:zgke 没你说的那么简单的。lambda表达是怎么反射?lambda表达式也没办法动态创建. 我就知道这个复杂~~我在想能不能用Microsoft.CSharp;System.CodeDom.Compiler;把lambda放这里运行..然后获取结果 再回来反射呢? 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属性赋值==========现在问题是不知道你要反射到什么程度呢? 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(); } }} 反射程度是:1.仅知道oc这个对象2.另外还知道"p=>p.id==1"这个字符串,注意是字符串现在要修改spec的值 计算2个时间之间的月份差 C#中using(){}是什么意思? 想在程序中修改电源选项设置 编程方式删除共享文件夹 稍有难度的算法问题(本来想给100分的,但只剩下90分了)。 一个关于combobox的与datasource的问题是高手就进来 怎样改变dagagrid中某些单元格的背景颜色? 怎样用代码实现让鼠标自动单击 怎样用XMLHTTP无刷新获取开奖信息,像时时彩基地一样。 关于DotNet引用组件的问题! datagridview值,传到另一个form 使用filter把背景图片拉伸后控件点击使用不了
是First(int pid)?
First的定义
public static TSource First<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
与delegate (p的类型 p) { return p.id == 1;}是一样的
没你说的那么简单的。lambda表达是怎么反射?lambda表达式也没办法动态创建.
我在想能不能用
Microsoft.CSharp;
System.CodeDom.Compiler;
把lambda放这里运行..然后获取结果 再回来反射呢?
oc.t300km指的是一个列表之类的对象
oc.t300km.First(p => p.id == 1)是从列表对象中取出了符合条件的第一个
oc.t300km.First(p => p.id == 1).spec给取出来的对象的spec属性赋值
==========
现在问题是不知道你要反射到什么程度呢?
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();
}
}
}
反射程度是:
1.仅知道oc这个对象
2.另外还知道"p=>p.id==1"这个字符串,注意是字符串现在要修改spec的值