コード例 #1
0
        public override bool VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data)
        {
            bool result = base.VisitMemberReferenceExpression(memberReferenceExpression, data);
            UnaryOperatorExpression uoe = memberReferenceExpression.Target as UnaryOperatorExpression;

            if (uoe != null && uoe.Operator == UnaryOperatorType.Dereference)
            {
                PointerReferenceExpression pre = new PointerReferenceExpression();
                pre.Target          = uoe.Expression.Detach();
                pre.MemberNameToken = (Identifier)memberReferenceExpression.MemberNameToken.Clone();
                memberReferenceExpression.TypeArguments.MoveTo(pre.TypeArguments);
                pre.CopyAnnotationsFrom(uoe);
                pre.CopyAnnotationsFrom(memberReferenceExpression);
                pre.AddAnnotation(memberReferenceExpression.GetAllRecursiveILRanges());
                memberReferenceExpression.ReplaceWith(pre);
            }
            return(result);
        }