Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You'll need to get the member name from the lambda expression, and use reflection to get that member off of the type you've been given:</p> <pre><code>public static PropertyInfo PropInfo&lt;TContainer, TMember&gt;( Expression&lt;Func&lt;TContainer, TMember&gt;&gt; memberGetter) { var memberName = GetExpressionMemberName(memberGetter); return typeof(TContainer).GetProperty(memberName); } public static string GetExpressionMemberName&lt;TContainer, TMember&gt;( Expression&lt;Func&lt;TContainer, TMember&gt;&gt; memberGetter) { var expressionType = memberGetter.Body.NodeType; switch (expressionType) { case ExpressionType.MemberAccess: { var memberExpr = (MemberExpression) memberGetter.Body; return memberExpr.Member.Name; } case ExpressionType.Convert: { var convertExpr = (UnaryExpression) memberGetter.Body; var memberExpr = (MemberExpression) convertExpr.Operand; return memberExpr.Member.Name; } default: throw new InvalidOperationException("Expression {0} does not represent a simple member access."); } } </code></pre> <p>Here's proof that it works:</p> <pre><code>void Main() { Console.WriteLine( MyGenericMethod&lt;Employee&gt;() .GetGetMethod() .Invoke( new Employee {Name = "Bill"}, new object[] {})); } public class Employee : IEmployee { public string Name {get;set;} string IEmployee.Name { get { throw new Exception(); } } } public interface IEmployee {string Name {get;}} public PropertyInfo MyGenericMethod&lt;T&gt;() where T : IEmployee { return PropInfo((T e) =&gt; e.Name); } </code></pre> <p>Console output:</p> <pre><code>Bill </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload