Как узнать тип, указанный в выражении? - PullRequest
1 голос
/ 12 августа 2010

Например, допустим, у меня есть метод, который принимает в качестве параметра следующее:

Expression<Func<T, object>> path

Как определить тип «объекта», указанного в выражении?Более конкретно, я хотел бы определить, является ли это тип коллекции (например, IEnumerable)

Ответы [ 3 ]

2 голосов
/ 12 августа 2010

Вы уже используете дженерики, так почему бы не пройти весь путь?

void GetMemberType<TArg, TProperty>(Expression<Func<TArg, TProperty>> path)
{
    // Get the member ...
    var member = path.Body as MemberExpression;

    // ... Do whatever you want with the member ...

    // Now get the type
    var memberType = typeof(TProperty);
}
1 голос
/ 12 августа 2010

В качестве альтернативы, вы можете сделать что-то вроде следующего (что более соответствует вашим аргументам универсального типа):

// Get your expression
// (probably already provided as an arg to one of your methods, I'm willing to bet)
Expression<Func<T, object>> path = ...

var memberExpr = path.Body as MemberExpression;
var member = memberExpr.Member;

Type type;

if (member is FieldInfo)
{
    var field = member as FieldInfo;
    type = field.FieldType;
}

if (member is PropertyInfo)
{
    var property = member as PropertyInfo;
    type = property.PropertyType;
}
0 голосов
/ 12 августа 2010

Expression.Type ответит на это (тип выражения «результат»).

Чтобы копать глубже и в более общем плане, вам нужно будет рассмотреть различные возможности в зависимости от фактического,время выполнения, тип экземпляра Expression - какой из множества подтипов Expression у вас есть на самом деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...