Skip to content

Commit dc12a5c

Browse files
committed
Improve expression helper
1 parent 2905169 commit dc12a5c

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

src/JoinRpg.Helpers/ExpressionHelpers.cs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,35 @@ namespace JoinRpg.Helpers
88
public static class ExpressionHelpers
99
{
1010
[CanBeNull]
11-
public static string? AsPropertyName<T1, T2>(this Expression<Func<T1, T2>> expression) => expression.AsPropertyAccess()?.Name;
11+
public static string? AsPropertyName<T1, T2>(this Expression<Func<T1, T2>> expression)
12+
=> expression.AsPropertyAccess()?.Name;
13+
14+
public static string? AsPropertyName<T1>(this Expression<Func<T1>> expression)
15+
=> expression.AsPropertyAccess()?.Name;
16+
17+
[CanBeNull]
18+
public static PropertyInfo? AsPropertyAccess<T1, T2>(this Expression<Func<T1, T2>> expression)
19+
=> AsPropetyAccessImpl(expression.Body);
1220

1321
[CanBeNull]
14-
public static PropertyInfo? AsPropertyAccess<T1, T2>(
15-
this Expression<Func<T1, T2>> expression)
22+
public static PropertyInfo? AsPropertyAccess<T>(this Expression<Func<T>> expression)
23+
=> AsPropetyAccessImpl(expression.Body);
24+
25+
private static PropertyInfo? AsPropetyAccessImpl(Expression expression)
1626
{
17-
if (expression.Body is UnaryExpression convertExpression &&
27+
if (expression is UnaryExpression convertExpression &&
1828
convertExpression.NodeType == ExpressionType.Convert)
1929
{
2030
return AsPropertyAccess(convertExpression.Operand);
2131
}
2232

23-
return AsPropertyAccess(expression.Body);
33+
return AsPropertyAccess(expression);
2434
}
2535

2636
[CanBeNull]
2737
private static PropertyInfo? AsPropertyAccess(Expression body)
2838
{
29-
var memberExpression = body as MemberExpression;
30-
return memberExpression?.Member as PropertyInfo;
39+
return (body as MemberExpression)?.Member as PropertyInfo;
3140
}
32-
33-
public static string AsPropertyName<T1>(this Expression<Func<T1>> expression) => ((MemberExpression)expression.Body).Member.Name;
3441
}
3542
}

0 commit comments

Comments
 (0)