public void ToString(StringBuilder builder) { builder.Append(StringTokens.TagOpen); builder.Append(Tag); builder.Append(StringTokens.ArgumentsOpen); CaseSwitch.ToString(builder); builder.Append(StringTokens.ArgumentsClose); builder.Append(StringTokens.TagClose); foreach (var caseValue in Cases) { builder.Append(StringTokens.TagOpen); builder.Append(StringTokens.CaseTagName); builder.Append(StringTokens.ArgumentsOpen); builder.Append(caseValue.Key); builder.Append(StringTokens.ArgumentsClose); builder.Append(StringTokens.TagClose); caseValue.Value.ToString(builder); builder.Append(StringTokens.TagOpen); builder.Append(StringTokens.ElementClose); builder.Append(StringTokens.CaseTagName); builder.Append(StringTokens.TagClose); } builder.Append(StringTokens.TagOpen); builder.Append(StringTokens.ElementClose); builder.Append(Tag); builder.Append(StringTokens.TagClose); }
public IExpression Evaluate(EvaluationParameters parameters) { var evalSwitch = CaseSwitch.TryEvaluate(parameters); var asInt = parameters.FunctionProvider.ToInteger(evalSwitch); INode caseNode; if (!_Cases.TryGetValue(asInt, out caseNode)) { throw new InvalidOperationException(); } return(caseNode.TryEvaluate(parameters)); }
private void ParseCaseExpression(CaseExpression caseExpression) { while (Tokenizer.IsNextToken(Constants.When)) { ReadNextToken(); CaseSwitch caseSwitch = new CaseSwitch(caseExpression); caseSwitch.When = ReadCriteriaList(caseExpression); Tokenizer.ExpectToken(Constants.Then); caseSwitch.Then = ReadExpression(caseExpression); caseExpression.Cases.Add(caseSwitch); } if (Tokenizer.IsNextToken(Constants.Else)) { ReadNextToken(); caseExpression.Else = ReadExpression(caseExpression); } ExpectToken(Constants.End); }