37 votes

Obtenir le nom et le type de la propriété en utilisant l'expression lambda

J'essaie d'écrire une fonction qui va tirer le nom d'une propriété et le type en utilisant une syntaxe comme ci-dessous:

 private class SomeClass
{
    Public string Col1;
}

PropertyMapper<Somewhere> propertyMapper = new PropertyMapper<Somewhere>();
propertyMapper.MapProperty(x => x.Col1)
 

Existe-t-il un moyen de transmettre la propriété à la fonction sans modification majeure de cette syntaxe?

Je voudrais obtenir le nom de la propriété et le type de propriété.

Donc, dans l'exemple ci-dessous, je voudrais récupérer

Name = "Col1" et Type = "System.String"

Quelqu'un peut-il aider?

62voto

Jacob Carpenter Points 3225

Voici une exemple d'utilisation d' Expressions pour obtenir le nom d'une propriété ou un terrain pour vous aider à démarrer:

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");
}

Appeler le code devrait ressembler à ceci:

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);
    }
}

Un mot d'avertissement, cependant: la simple déclaration d' (Program p) => p.Name implique, en réalité, tout à fait un peu de travail (et peut prendre des quantités mesurables de temps). Envisager la mise en cache le résultat plutôt que d'appeler la méthode fréquemment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X