コード例 #1
0
            public override object VisitAmountSignedConvertible(CurrencyComputerParser.AmountSignedConvertibleContext context)
            {
                var amountSigned = (AmountSigned)VisitAmountSigned(context.amountSigned());

                var conversionStr = (string)VisitConversion(context.conversion());
                var convertTo     = _conversionToCurrencyConventions[conversionStr];

                return(ConvertTo(amountSigned, convertTo));
            }
コード例 #2
0
            public override object VisitAmountSignedConvertible(CurrencyComputerParser.AmountSignedConvertibleContext context)
            {
                var amountSigned = (AmountSigned)VisitAmountSigned(context.amountSigned());

                // Контроль типов: нельзя конвертировать валюту в саму себя
                if (amountSigned.Amount.Currency == _targetCurrency)
                {
                    throw new SyntaxException($"Can't convert {context.GetText()}, because {amountSigned.Amount.Currency} is destination currency.");
                }

                var conversionStr = (string)VisitConversion(context.conversion());
                var convertTo     = _conversionToCurrencyConventions[conversionStr];

                var converted = ConvertTo(amountSigned, convertTo);

                if (converted != amountSigned)
                {
                    _logger?.LogDebug("{OperationNumber}:Converted from {Source} to {Dest}.", _operationsLogger++, amountSigned, converted);
                }

                return(converted);
            }
コード例 #3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="CurrencyComputerParser.amountSignedConvertible"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitAmountSignedConvertible([NotNull] CurrencyComputerParser.AmountSignedConvertibleContext context)
 {
     return(VisitChildren(context));
 }