protected override void PostWalk(UnaryExpression node)
                {
                    base.PostWalk(node);

                      if (node.NodeType == AstNodeType.Convert)
                      {
                    var op = node.Operand;
                    if (op.NodeType == AstNodeType.Convert)
                    {
                      var inode = op as UnaryExpression;
                      if (inode.Operand.Type == node.Type)
                      {
                    node.Operand = inode.Operand;
                      }
                    }
                    if (node.Type != typeof(object) &&
                      node.Type != op.Type &&
                      node.Type.IsAssignableFrom(op.Type) &&
                      !(node.Type.IsInterface && op.Type.IsValueType))
                    {
                      node.SetType(op.Type);
                    }
                      }
                }