示例#1
0
 public void Lambda()
 {
     var instance = new ReflectionTarget();
 }
示例#2
0
            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);
            }
示例#3
0
 public void New()
 {
     var instance = new ReflectionTarget();
 }