是否可以在lambda表达式中引用私有属性?或者只是公共财产?
例如。说我的私有财产名为InnerCollection,代码行为:
x => x.InnerCollection
有没有办法以某种方式实现这一点 - 不使用反射等。?
使用.NET 4.0。
感谢。
克里斯
答案 0 :(得分:6)
不,除非(不太可能)lambda是在x
类的方法中定义的。
答案 1 :(得分:0)
除非lambda定义在类的方法中定义私有字段/属性,否则不存在。那么你将不得不处理反思。
答案 2 :(得分:0)
您可以在课程的外部或内部使用此功能,这仅适用于现在的字段,但您可以根据需要修改属性。
public static Func<T, R> GetFieldAccessor<T, R>(string fieldName)
{
ParameterExpression param =
Expression.Parameter(typeof(T), "arg");
MemberExpression member =
Expression.Field(param, fieldName);
LambdaExpression lambda =
Expression.Lambda(typeof(Func<T, R>), member, param);
Func<T, R> compiled = (Func<T, R>)lambda.Compile();
return compiled;
}
用法看起来像这样:
public class MyClass
{
private int _secret = 10;
}
var myClass = new MyClass();
Console.WriteLine("func:" + GetFieldAccessor<MyClass, int>("_secret").Invoke(myClass));