Esempio n. 1
0
        public static IEnumerable<Queue<string>> GetTrailsAndinjectValue(PropertyWithComponent target, PropertyWithComponent source, Predicate<Type> f, Queue<string> root, StringComparison comparison)
        {
            if (string.Equals(target.Property.Name, source.Property.Name, comparison) && f(source.Property.PropertyType))
            {
                var queue = new Queue<string>();
                queue.Enqueue(source.Property.Name);
                source.Property.SetValue(target.Component, source.Property.GetValue(source.Component, null), null);
                yield return queue;
                yield break;
            }

            if (target.Property.Name.StartsWith(source.Property.Name, comparison))
            {
                root.Enqueue(source.Property.Name);
                foreach (var pro in source.Property.PropertyType.GetInfos())
                {
                    foreach (var trail in GetTrails(target.Property.Name.RemovePrefix(source.Property.Name, comparison), pro, f, root, comparison))
                    {
                        var queue = new Queue<string>();
                        queue.Enqueue(source.Property.Name);
                        foreach (var value in trail.Reverse())
                        {
                            queue.Enqueue(value);
                        }
                        yield return queue;
                    }
                }
            }
        }
Esempio n. 2
0
 public static IEnumerable<Queue<string>> GetTrailsAndinjectValue(PropertyWithComponent target, IEnumerable<PropertyWithComponent> all, Predicate<Type> f, StringComparison comparison)
 {
     return all.SelectMany(p => GetTrailsAndinjectValue(target, p, f, new Queue<string>(), comparison));
 }