不支持通过ReadOnlySpan <char>进行switch语句吗?

时间:2019-02-24 15:55:34

标签: c#

我正在使用C#在Span上玩游戏。

我是对的,我不能使用带有span的switch语句,我必须编写这样的方法吗?

 private int GetNumberOfLegs(ReadOnlySpan<char> animal)
 {
     if (animal.SequenceEqual("dog".AsSpan()))
        return 4;
     if (animal.SequenceEqual("cat".AsSpan()))
        return 4;
     if (animal.SequenceEqual("spider".AsSpan()))
        return 8;
     if (animal.SequenceEqual("bird".AsSpan()))
        return 2;

    throw new NotSupportedException($"Uknown animal {animal.ToString()}");
 }

是否有更好的方法来用Span表示此算法?

1 个答案:

答案 0 :(得分:1)

滥用pattern matching有帮助:

private int GetNumberOfLegs(ReadOnlySpan<char> animal)
{
    switch (animal)
    {
        case var dog when dog.SequenceEqual("dog".AsSpan()):
            return 4;
        case var cat when cat.SequenceEqual("cat".AsSpan()):
            return 4;
        case var spider when spider.SequenceEqual("spider".AsSpan()):
            return 8;
        case var bird when bird.SequenceEqual("bird".AsSpan()):
            return 2;
    }

    throw new NotSupportedException($"Uknown animal {animal.ToString()}");
}
相关问题