表达式树Expression是Linq中一项比较重要的功能,对其深刻了解Lamda以及计算表达式有很大的帮助.
下面是利用 Expression<Func<Object>>[]取得Func<Object>中的操作数或成员名称以及值。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; using System.Reflection; namespace ExpressionTree { class Program { static void Main(string[] args) { MyClass cls = new MyClass() { Memo = "ffffddddd", Name = "dfdf", Age = 33 }; Dictionary<string, string> dic = GetProps(() => cls.Memo, () => cls.Age); foreach (KeyValuePair<string,string> item in dic) { Console.WriteLine(item.Key + "=" + item.Value); } Console.Read(); } static Dictionary<string, string> GetProps(params Expression<Func<Object>>[] funcs) { Dictionary<string, string> dic = new Dictionary<string, string>(); MemberExpression member = null; UnaryExpression unary = null; foreach (Expression<Func<Object>> func in funcs) { unary = func.Body as UnaryExpression; if (unary != null) { member = unary.Operand as MemberExpression; } else { member = func.Body as MemberExpression; } PropertyInfo prop = member.Member as PropertyInfo; object value = func.Compile().Invoke(); dic.Add(prop.Name, Convert.ToString(value)); } return dic; } } class MyClass { public string Name { get; set; } public int Age { get; set; } public string Memo { get; set; } } }