This repository has been archived on 2023-02-02. You can view files and clone it, but cannot push or open issues or pull requests.
mfgames-nitride-cil/src/MfGames.Nitride/ExpressionHelper.cs

68 lines
1.7 KiB
C#
Raw Normal View History

2021-09-07 05:15:45 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
2022-09-06 05:53:22 +00:00
namespace MfGames.Nitride;
/// <summary>
/// Helper methods for getting the names of properties.
/// </summary>
public static class ExpressionHelper
2021-09-07 05:15:45 +00:00
{
public static string GetMemberName<T>(
Expression<Func<T, object?>> expression)
{
return GetMemberName(expression.Body);
}
public static IEnumerable<string> GetMemberNames<T>(
params Expression<Func<T, object?>>[] expressions)
2021-09-07 05:15:45 +00:00
{
return expressions.Select(x => GetMemberName(x.Body));
}
public static IEnumerable<string> GetMemberNames<T>(
this T instance,
params Expression<Func<T, object?>>[] expressions)
{
return GetMemberNames<T>(expressions);
}
private static string GetMemberName(Expression expression)
{
if (expression == null)
2021-09-07 05:15:45 +00:00
{
throw new ArgumentException(nameof(expression));
2021-09-07 05:15:45 +00:00
}
if (expression is MemberExpression memberExpression)
2021-09-07 05:15:45 +00:00
{
return memberExpression.Member.Name;
2021-09-07 05:15:45 +00:00
}
if (expression is MethodCallExpression methodCallExpression)
2021-09-07 05:15:45 +00:00
{
return methodCallExpression.Method.Name;
2021-09-07 05:15:45 +00:00
}
if (expression is UnaryExpression unaryExpression)
2021-09-07 05:15:45 +00:00
{
return GetMemberName(unaryExpression);
2021-09-07 05:15:45 +00:00
}
throw new ArgumentException(nameof(expression));
}
2021-09-07 05:15:45 +00:00
private static string GetMemberName(UnaryExpression unaryExpression)
{
if (unaryExpression.Operand is MethodCallExpression
methodCallExpression)
{
return methodCallExpression.Method.Name;
2021-09-07 05:15:45 +00:00
}
return ((MemberExpression)unaryExpression.Operand).Member.Name;
2021-09-07 05:15:45 +00:00
}
}