Получите имя свойства и тип с помощью лямбда-выражения

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
37
задан nawfal 27 April 2013 в 13:10
поделиться

1 ответ

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

public static MemberInfo GetMemberInfo<T, U>(Expression<Func<T, U>> expression)
{
    var member = expression.Body as MemberExpression;
    if (member != null)
        return member.Member;

    throw new ArgumentException("Expression is not a member access", "expression");
}

Код вызова был бы похож на это:

public class Program
{
    public string Name
    {
        get { return "My Program"; }
    }

    static void Main()
    {
        MemberInfo member = ReflectionUtility.GetMemberInfo((Program p) => p.Name);
        Console.WriteLine(member.Name);
    }
}

предостережение А, хотя: простой statment (Program p) => p.Name на самом деле включает довольно мало работы (и может занять измеримое количество времени). Рассмотрите кэширование результата вместо того, чтобы часто назвать метод.

62
ответ дан Jacob Carpenter 27 November 2019 в 04:37
поделиться
Другие вопросы по тегам:

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