[英]How do I retrieve a reference to a subobject using Reflection in C#?
[英]How do I build this c# “Expression” at runtime using reflection?
直到今天,我还没有找到一篇关于表达的好文章 - 以及如何查看C#lambda语句并说“哦,那是一个等等等等......”所以,如果你知道一篇好文章,我会很感激这也是一个答案。
所以...给出以下c#代码:
public class SomeClass<T>
{
public TResult SomeMethod<TResult>(Expression<Func<T, TResult>> expression)
{
// This is just an example... don't get hung up on this :)
return default(TResult);
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我该怎么做呢...
var blah = new SomeClass<Person>();
blah.SomeMethod(p => p.FirstName);
在运行时(使用反射)?
我有点期待这样的事情...但我确信我选择的表达方式已经过时了。
// By the way, these values are being passed to me... so you
// can't change this part of the question :)
Type personType = typeof(Person);
string propertyName = "FirstName";
// THIS CODE BELOW IS OBVIOUSLY WRONG, BUT YOU GET THE IDEA OF
// WHAT I HOPE TO DO... THIS LINE OF CODE BELOW IS **ALL** I'M
// ASKING HOW TO DO :)
var expression = Expression.MakeUnary(ExpressionType.Lambda,
Expression.Property(Expression.Parameter(personType, "p"),
propertyName), typeof(string));
blah.SomeMethod(expression);
试试这个:
var functorParam = Expression.Parameter(typeof(Person));
var lambda = Expression.Lambda(
Expression.Property(functorParam, typeof(Person).GetProperty("FirstName"))
, functorParam /* <<= EDIT #1 */
);
blah.SomeMethod((Expression<Func<Person,string>>)lambda); /* EDIT #2 */
ExpressionBuilder是要走的路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.