public object GetMemberValue(object value, string member)
{
if (IsPrimitive(value))
throw new ArgumentException("value");
var dict = value as IDictionary;
if (dict != null)
return dict[member];
var list = (IList) value;
int index = ParseInt(member, -1);
if (index >= 0 && index < list.Count)
return list[index];
return null;
}