private static bool TryGetBuilderMember <TSymbol>(
            SyntheticBoundNodeFactory F,
            WellKnownMember?member,
            NamedTypeSymbol builderType,
            bool customBuilder,
            out TSymbol symbol
            ) where TSymbol : Symbol
        {
            if (!member.HasValue)
            {
                symbol = null;
                return(true);
            }

            WellKnownMember memberValue = member.Value;

            if (customBuilder)
            {
                var descriptor = WellKnownMembers.GetDescriptor(memberValue);
                var sym        = CSharpCompilation.GetRuntimeMember(
                    builderType.OriginalDefinition,
                    descriptor,
                    F.Compilation.WellKnownMemberSignatureComparer,
                    accessWithinOpt: null
                    );
                if ((object)sym != null)
                {
                    sym = sym.SymbolAsMember(builderType);
                }
                symbol = sym as TSymbol;
            }
            else
            {
                symbol = F.WellKnownMember(memberValue, isOptional: true) as TSymbol;
                if ((object)symbol != null)
                {
                    symbol = (TSymbol)symbol.SymbolAsMember(builderType);
                }
            }
            if ((object)symbol == null)
            {
                var descriptor = WellKnownMembers.GetDescriptor(memberValue);
                var diagnostic = new CSDiagnostic(
                    new CSDiagnosticInfo(
                        ErrorCode.ERR_MissingPredefinedMember,
                        (
                            customBuilder
                                ? (object)builderType
                                : descriptor.DeclaringTypeMetadataName
                        ),
                        descriptor.Name
                        ),
                    F.Syntax.Location
                    );
                F.Diagnostics.Add(diagnostic);
                return(false);
            }
            return(true);
        }