public IActionResult Index() { EquationParameters equationParameters = new EquationParameters() { Number1 = 1, Number2 = 2, Operator = System.Linq.Expressions.ExpressionType.Add }; ViewBag.SupportedOperators = SupportedOperators.GetSupportedOperatorsAsListItems(); return(View(equationParameters)); }
public IActionResult Index([FromForm] EquationParameters equationParameters) { ViewBag.EquationResult = equationParameters.Operator switch { ExpressionType.Add => Add(equationParameters.Number1, equationParameters.Number2), ExpressionType.Subtract => Subtract(equationParameters.Number1, equationParameters.Number2), ExpressionType.Multiply => Multiply(equationParameters.Number1, equationParameters.Number2), ExpressionType.Divide => Divide(equationParameters.Number1, equationParameters.Number2), _ => throw new NotSupportedException() }; ViewBag.SupportedOperators = SupportedOperators.GetSupportedOperatorsAsListItems(); return(View(equationParameters)); }
public override void VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression) { var expression = binaryOperatorExpression; base.VisitBinaryOperatorExpression(expression); if (!SupportedOperators.Contains(expression.Operator)) { return; } var parentExpression = expression.Parent as BinaryOperatorExpression; if (parentExpression != null && parentExpression.Operator == expression.Operator) { //handle only parent sequence return; } var expressions = GetExpressions(binaryOperatorExpression, expression); for (var i = 0; i < expressions.Count - 1; i++) { for (var j = i + 1; j < expressions.Count; j++) { var expressionLeft = expressions[i]; var expressionRight = expressions[j]; if (!expressionLeft.IsMatch(expressionRight)) { continue; } var action = new CodeAction(ctx.TranslateString("Remove redundant expression"), script => RemoveRedundantExpression(script, expressionRight), expressionRight); AddDiagnosticAnalyzer( new CodeIssue(expressionRight, ctx.TranslateString(string.Format("The expression '{0}' is identical in the left branch", expressionRight)), action ) { IssueMarker = IssueMarker.GrayOut } ); } } }
public RuleParameterModel(RuleParameter param) : this() { Name = param.Name; DisplayName = param.Name; ValueType = param.ValueType.FullName; IsNumberValue = param.ValueType.IsNumericType(); foreach (var @operator in param.SupportedOperators) { SupportedOperators.Add(new ComparisonOperatorModel(@operator)); } if (param.ValueSource != null) { Values = param.ValueSource.GetValues(param).Select(x => new SelectListItem { Text = x.Key, Value = x.Value }) .ToList(); } }
public static bool IsOperator(string name) => SupportedOperators.ContainsKey(name);