Это Oliver Hanappi «S статический код отражения ситемы posted на StackOverflowКаковы прецеденты для этого кода статического отражения?
private static string GetMemberName(Expression expression)
{
switch (expression.NodeType)
{
case ExpressionType.MemberAccess:
var memberExpression = (MemberExpression)expression;
var supername = GetMemberName(memberExpression.Expression);
if (String.IsNullOrEmpty(supername))
return memberExpression.Member.Name;
return String.Concat(supername, '.', memberExpression.Member.Name);
case ExpressionType.Call:
var callExpression = (MethodCallExpression)expression;
return callExpression.Method.Name;
case ExpressionType.Convert:
var unaryExpression = (UnaryExpression)expression;
return GetMemberName(unaryExpression.Operand);
case ExpressionType.Parameter:
return String.Empty;
default:
throw new ArgumentException("The expression is not a member access or method call expression");
}
}
У меня есть методы общественных оболочки:
public static string Name<T>(Expression<Action<T>> expression)
{
return GetMemberName(expression.Body);
}
public static string Name<T>(Expression<Func<T, object>> expression)
{
return GetMemberName(expression.Body);
}
затем добавил мой собственный метод ярлыки
public static string ClassMemberName<T>(this T sourceType,Expression<Func<T,object>> expression)
{
return GetMemberName(expression.Body);
}
public static string TMemberName<T>(this IEnumerable<T> sourceList, Expression<Func<T,object>> expression)
{
return GetMemberName(expression.Body);
}
Что примеры кода, которые потребуют или используют преимущества разных ветвей в GetMemberName(Expression expression)
переключатель? что все этот код способен сделать строго типизированным?
Этот вопрос кажется мне немного странным. Если вы не знали, для чего собираетесь использовать этот код, почему вы его расширили? –
Я знаю, для чего его используют. Я спрашиваю о неочевидном использовании. Я использовал его широко, но я до сих пор не знаю, на что все это способно или что то, что я сделал, использует больше, чем одна его ветвь. – Maslow