Я хочу получить свойство от IDictionry
Я хочу получить к нему доступ при вызове VisitMember
Но когда я его запустил
Кажется, что значение словаря не возвращается
Потому что, когда я пытаюсь преобразовать, как здесь:
var dictProperty = declProp as IDictionary<string, object>;
, он возвращает null (но имеет тип IDictionary)
В чем проблема?
protected override Expression VisitMember(MemberExpression node)
{
if ((node.Member as PropertyInfo) != null)
{
//this line returns propety IDictionary<string,object> of my object which Type
//I can get from node.Member.DeclaringType)
var declProp = node.Member.DeclaringType.GetProperty(node.Member.Name);
///trying to get to dictionary Item and return value
var parameterExpression = Expression.Parameter(typeof(IDictionary<string,
object>), "dict");
var constant = Expression.Constant("ContentType");
var propertyGetter = Expression.Property(parameterExpression, "Item", constant);
var expr = Expression.Lambda<Func<IDictionary<string, object>, object>>(propertyGetter, parameterExpression).Compile();
//but dictProperty is null
//and it seems there is no value
var dictProperty = declProp as IDictionary<string, object>;
var value = expr(dictProperty);//trick to get value from dict
}
else if ((node.Member as FieldInfo) != null)
{
var fieldInfo = node.Member as FieldInfo;
var constantExpression = node.Expression as ConstantExpression;
if (fieldInfo != null & constantExpression != null)
{
var value = fieldInfo.GetValue(constantExpression.Value);
}
}
else
{
throw new Exception();
}
Expression mappedMember;
if (map.memberMap.TryGetValue(node.Member, out mappedMember))
return Visit(mappedMember);
return Expression.PropertyOrField(expression, node.Member.Name);
}