是否可以在lambda表達式中引用私有屬性?還是隻有公共財產?參考Lambda表達式中的私有屬性?
例如。說我的私有財產被命名爲InnerCollection,代碼行是:
x => x.InnerCollection
有沒有辦法以某種方式實現這一點 - 不使用反射等?
使用.NET 4.0。
謝謝。
克里斯
是否可以在lambda表達式中引用私有屬性?還是隻有公共財產?參考Lambda表達式中的私有屬性?
例如。說我的私有財產被命名爲InnerCollection,代碼行是:
x => x.InnerCollection
有沒有辦法以某種方式實現這一點 - 不使用反射等?
使用.NET 4.0。
謝謝。
克里斯
除非lambda定義在該類的方法中定義了私有字段/屬性,否則不存在。那麼你必須處理反射。
「除非你在課堂內部」聽起來像是指的是lambda調用,而不是lambda定義。注意Henk的答案在下面。 – shannon 2013-04-02 12:05:00
否,除非(不可能)拉姆達是類x
的方法中定義。
你可以在課堂外或課堂內部使用,這隻適用於現在的領域,但如果你願意,你可以修改它的屬性。
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));
「私有財產」意味着你不能從外部類訪問它。 – 2011-02-17 21:15:39