Получить строку вызывающей переменной - PullRequest
0 голосов
/ 05 октября 2019

Предположим, у меня есть переменный вызов, подобный этому

Foo foo = new Foo();
foo.bar = new Bar();
foo.bar.property // something

class Bar  { property { get; set; } }
class Foo { Bar bar {get; set; }}

Есть ли способ упорядочить этот вызов, например

string myCall = myStringify(foo.bar.property);
// yields either "bar.property" or "foo.bar.property"

Почему это? Я использую отражение, чтобы создать ключи для этого. Таким образом, приведенный выше пример создаст ключ "bar.property" в списке (который войдет в базу данных и т. Д.). Я мог бы просто написать string key = "bar.property", но тогда я бы не знал, существовало ли это на самом деле. Используя приведенный выше пример, я могу гарантировать, что этот ключ действительно существует.

1 Ответ

2 голосов
/ 05 октября 2019

Я не знаю, почему за вас голосуют, во всяком случае, я придумал это, попробуйте.

static string Stringify<T>(Expression<Func<T>> expr)
{
    var memberNames = new Stack<string>();

    var propertyExpression = expr.Body as MemberExpression;
    while (propertyExpression != null)
    {
        memberNames.Push(propertyExpression.Member.Name);

        propertyExpression = propertyExpression.Expression as MemberExpression;
    }

    return string.Join('.', memberNames);
}

Используется так:

string yourCall = Stringify(() => f.Bar.Property);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...