Ссылка Частная собственность в лямбда-выражении? - PullRequest
1 голос
/ 18 февраля 2011

Можно ли ссылаться на частную собственность в лямбда-выражении? Или только публичная недвижимость?

Например. скажем, моя частная собственность называется InnerCollection, строка кода будет:

x => x.InnerCollection

Есть ли способ как-то этого достичь - не используя отражения и т. Д.?

Использование .NET 4.0.

Спасибо.

Chris

Ответы [ 3 ]

6 голосов
/ 18 февраля 2011

Нет, если (вряд ли) лямбда определена внутри метода класса x.

0 голосов
/ 28 сентября 2017

Вы можете использовать это вне или внутри класса, это работает только для полей прямо сейчас, но вы можете изменить его для свойств, если хотите.

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));
0 голосов
/ 18 февраля 2011

Если лямбда-определение не содержится в методе класса, в котором определено приватное поле / свойство, то нет. Тогда вам придется иметь дело с отражением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...