0
我有存儲函數的字典。 雖然存儲Func(testDir.Add(1,p => p.Id))很好。當我從字典中獲得Func時,我想要存儲在Func中的屬性(Id)的名稱。 我曾試過Retrieving Property name from lambda expression Get property name and type using lambda expression此鏈接。它在簡單的Func中工作。但與字典我得到成員= null在GetMemberInfo。想要Func參數名稱不是值,存儲在字典
public static MemberInfo GetMemberInfo<T, U>(Expression<Func<T, U>> expression)
{
var member = expression.Body as MemberExpression;
if (member != null)
return member.Member;
throw new ArgumentException("Expression is not a member access", "expression");
}
static void Main(string[] args)
{
Dictionary<int, Func<Soure.Employee, int>> testDir = new Dictionary<int, Func<Soure.Employee, int>>();
testDir.Add(1, p => p.Id);
var testDirValue = testDir[1];
Expression<Func<Soure.Employee, int>> expr1 = mc => testDirValue(mc);
MemberInfo member = Program.GetMemberInfo(expr1);
Console.WriteLine(member.Name);
}
感謝阿薩德。然後如何執行存儲在Expression中的Func。 –
@HemantMalpote爲了從'Expression'中獲得'Func',只需使用'Compile'方法。 'Func idGetter = testDir [1] .Compile(); int id = idGetter(someEmployee);'。 –