public void Start()
 {
     ItemPathTranslator translator = new ItemPathTranslator(_source, _target);
     IEnumerable<Item> sourceDescendants = GetDescendantsAndSelf(_source);
     ItemReferenceReplacer replacer = InitializeReplacer(sourceDescendants, translator);
     foreach (Item equivalentTarget in replacer.OtherItems)
     {
         replacer.ReplaceItemReferences(equivalentTarget);
     }
 }
        private ItemReferenceReplacer InitializeReplacer(IEnumerable<Item> sourceDescendants, ItemPathTranslator translator)
        {
            ItemReferenceReplacer replacer = new ItemReferenceReplacer(ExcludeStandardSitecoreFieldsExceptLayout);
            foreach (Item sourceDescendant in sourceDescendants)
            {
                if (!translator.CanTranslatePath(sourceDescendant))
                    continue;

                Item equivalentTarget = sourceDescendant.Database.GetItem(translator.TranslatePath(sourceDescendant));
                if (equivalentTarget == null)
                    continue;

                replacer.AddItemPair(sourceDescendant, equivalentTarget);
            }
            return replacer;
        }