-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathFindProperty.cs
More file actions
53 lines (52 loc) · 1.99 KB
/
FindProperty.cs
File metadata and controls
53 lines (52 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace AutoCopyLib
{
public partial class AutoCopy<TSource, TDest>
{
#region FindProperty
internal static MemberInfo FindProperty(LambdaExpression lambdaExpression)
{
Expression expression = lambdaExpression;
bool flag = false;
while (!flag)
{
ExpressionType nodeType = expression.NodeType;
if (nodeType != ExpressionType.Convert)
{
if (nodeType != ExpressionType.Lambda)
{
if (nodeType != ExpressionType.MemberAccess)
{
flag = true;
}
else
{
MemberExpression memberExpression = (MemberExpression)expression;
if (memberExpression.Expression.NodeType != ExpressionType.Parameter && memberExpression.Expression.NodeType != ExpressionType.Convert)
{
throw new ArgumentException(string.Format("Expression '{0}' must resolve to top-level member and not any child object's properties.", lambdaExpression), "lambdaExpression");
}
return memberExpression.Member;
}
}
else
{
expression = ((LambdaExpression)expression).Body;
}
}
else
{
expression = ((UnaryExpression)expression).Operand;
}
}
throw new Exception("Custom configuration for members is only supported for top-level individual members on a type.");
}
#endregion
}
}