30 lines
1021 B
C#
30 lines
1021 B
C#
namespace Caliburn.Micro.Core {
|
|
using System.Linq.Expressions;
|
|
using System.Reflection;
|
|
|
|
/// <summary>
|
|
/// Extension for <see cref="Expression"/>.
|
|
/// </summary>
|
|
public static class ExpressionExtensions {
|
|
/// <summary>
|
|
/// Converts an expression into a <see cref="MemberInfo"/>.
|
|
/// </summary>
|
|
/// <param name="expression">The expression to convert.</param>
|
|
/// <returns>The member info.</returns>
|
|
public static MemberInfo GetMemberInfo(this Expression expression) {
|
|
var lambda = (LambdaExpression) expression;
|
|
|
|
MemberExpression memberExpression;
|
|
if (lambda.Body is UnaryExpression) {
|
|
var unaryExpression = (UnaryExpression) lambda.Body;
|
|
memberExpression = (MemberExpression) unaryExpression.Operand;
|
|
}
|
|
else {
|
|
memberExpression = (MemberExpression) lambda.Body;
|
|
}
|
|
|
|
return memberExpression.Member;
|
|
}
|
|
}
|
|
}
|