C#: Получение Названий свойств в цепочке от лямбда-выражения

long не может сохранить ваши права

<час>
  • Они могут:

    float f  = 10000000000000000000f;  
    double d = 10000000000000000000d; 
    BigInteger bigI = new BigInteger("100000000000000000000");
    BigDecimal bigD = new BigDecimal("100000000000000000000");
    
  • Они могут 'т

    byte b  = 10000000000000000000;    
    short s = 10000000000000000000; 
    int i   = 10000000000000000000;    
    long l  = 10000000000000000000L;   
    
36
задан Community 23 May 2017 в 12:17
поделиться

2 ответа

Что-то вроде этого?

public void Foo<T, P>(Expression<Func<T, P>> expr)
{
    MemberExpression me;
    switch (expr.Body.NodeType)
    {
        case ExpressionType.Convert:
        case ExpressionType.ConvertChecked:
            var ue = expr.Body as UnaryExpression;
            me = ((ue != null) ? ue.Operand : null) as MemberExpression;
            break;
        default:
            me = expr.Body as MemberExpression;
            break;
    }

    while (me != null)
    {
        string propertyName = me.Member.Name;
        Type propertyType = me.Type;

        Console.WriteLine(propertyName + ": " + propertyType);

        me = me.Expression as MemberExpression;
    }
}
31
ответ дан 27 November 2019 в 05:57
поделиться
    public static string GetPath<T, TProperty>(this Expression<Func<T, TProperty>> exp)
    {
        return string.Join(".", GetItemsInPath(exp).Reverse());
    }

    private static IEnumerable<string> GetItemsInPath<T, TProperty>(Expression<Func<T, TProperty>> exp)
    {
        if (exp == null)
        {
            yield break;
        }
        var memberExp = FindMemberExpression(exp.Body);
        while (memberExp != null)
        {
            yield return memberExp.Member.Name;
            memberExp = FindMemberExpression(memberExp.Expression);
        }
    }
0
ответ дан 27 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: