public void Lambda() { var instance = new ReflectionTarget(); }
public object GetMemberValue(object value, string member) { // Find and invoke property to get value LastMemberValue = new ReflectionTarget( GetMember(value, member).Properties.Where(p => p.Name == member).FirstOrDefault(), value); if (IsPrimitive(value)) { throw new ArgumentException(null, nameof(value)); } if (value is IDictionary dict) { return(dict[member]); } if (value is IList list && TryParseInt(member) is int i && i >= 0 && i < list.Count) { return(list[i]); } string typeFilter; // Separate member and typeFilter from member field (member, typeFilter) = StripTypeFilter(member); var propertyInfo = GetMember(value, member).Properties.Where(p => p.Name == member).FirstOrDefault(); LastMemberValue = new ReflectionTarget(propertyInfo, value); if (value is IEnumerable enumerable) { if (TryParseInt(member) is int k) { var v = 0; foreach (var n in enumerable) { if (v++ == k) { return(n); } } } foreach (var n in enumerable) { if (n.GetType().Name == typeFilter) { return(n); } } } // Invoke property to get value var propertyValue = propertyInfo.GetGetMethod().Invoke(value, null); if (!string.IsNullOrEmpty(typeFilter) && propertyValue is IEnumerable items) { foreach (var item in items) { if (item.GetType().Name == typeFilter) { return(item); } } } return(propertyValue); }
public void New() { var instance = new ReflectionTarget(); }