public override void Visit(PartReplacer func)
            {
                int argNum = 0;

                foreach (var arg in tlist.ToArray())
                {
                    var argr = func(arg, func);
                    if (ReferenceEquals(argr, null))
                    {
                        return;
                    }
                    if (!ReferenceEquals(argr, arg))
                    {
                        this.ArgList[argNum] = argr;
                    }
                    argNum++;
                }
            }
            override public void Visit(PartReplacer func)
            {
                ArgList.Visit(func);

                /*
                 * int argNum = 0;
                 * foreach (var arg in Args)
                 * {
                 *  var argr = func(arg, func);
                 *  if (ReferenceEquals(argr, null)) return;
                 *  if (!ReferenceEquals(argr, arg))
                 *  {
                 *      this.ArgList[argNum] = argr;
                 *  }
                 *  argNum++;
                 * }
                 */
            }
 public virtual void Visit(PartReplacer replacer)
 {
     return;
 }