模式匹配案例何时

时间:2017-05-07 14:07:57

标签: c# .net pattern-matching c#-7.0

我编写简单的数学标记生成器并尝试使用新的C#pattern matching功能。

Tokenizer非常简单:

    public IEnumerable<IToken> Tokenize(string input)
    {
        const char decimalSeparator = '.';
        string inputWithoutSpaces = input.Replace(" ", string.Empty);
        var numberBuffer = new StringBuilder();
        var letterBuffer = new StringBuilder();
        foreach (char c in inputWithoutSpaces)
        {
            switch (c)
            {
                case var _ when IsTerm(c, letterBuffer):
                    if (numberBuffer.Length > 0)
                    {
                        yield return EmptyNumberBufferAsLiteral(numberBuffer);
                        yield return new Operator('*');
                    }
                    letterBuffer.Append(c);
                    break;
                case decimalSeparator:
                case var _ when IsDigit(c):
                    numberBuffer.Append(c);
                    break;
                case var _ when IsOperator(c):
                    if (numberBuffer.Length > 0)
                    {
                        yield return EmptyNumberBufferAsLiteral(numberBuffer);
                    }
                    if (letterBuffer.Length > 0)
                    {
                        yield return EmptyLetterBufferAsTerm(letterBuffer);
                    }
                    yield return new Operator(c);
                    break;
            }
        }
        if (numberBuffer.Length > 0)
        {
            yield return EmptyNumberBufferAsLiteral(numberBuffer);
        }
        if (letterBuffer.Length > 0)
        {
            yield return EmptyLetterBufferAsTerm(letterBuffer);
        }
    }

我正在使用case var _,因为我希望在不使用if-else if链条的情况下按条件进行匹配,但我无法在未指定case when的情况下编写var variableName

有没有任何奇特的方法来执行此类操作?或者推荐这样做的方法吗?

0 个答案:

没有答案