尝试返回开关时 Unity 中出现神秘的 C# 错误

Aci*_*onX -1 c# switch-statement unity-game-engine

我正在关注有关在 Unity 中生成 Minecraft 风格地形的 YouTube 教程,在教程的第 10 部分中,编写了一个脚本,其中包含一个以语句结尾的函数return x switch。switch的具体内容如下:

    public static Vector3Int GetVector(this Direction direction)
    {
        return direction switch
        {
            Direction.up => Vector3Int.up,
            Direction.down => Vector3Int.down,
            Direction.right => Vector3Int.right,
            Direction.left => Vector3Int.left,
            Direction.forward => Vector3Int.forward,
            Direction.backwards => Vector3Int.back,
            => throw new Exception("Invalid direction provided.")
        };
    }
Run Code Online (Sandbox Code Playgroud)

Direction是一个单独脚本中的枚举,其中包含forward, right, backwards, left, up, 和down, 按确切的顺序。问题是,一旦编译了代码,我就会在 Unity 中从 DirectionExtensions.cs(包含返回开关的脚本)收到此错误:

Assets/Scripts/Terrain/DirectionExtensions.cs(17,52):错误 CS8504:模式丢失

我尝试在 Google 上搜索错误代码和错误消息,但结果要么是参考资料(例如 C# 错误消息列表),要么是不相关的 Unity 错误。我没有发现任何实际发生过此错误的例子。不,该错误不是预期的,因此本教程不会演示如何在任何时候修复它。如何解决此错误以便我可以继续处理我的项目?

Nin*_*rry 5

您缺少discard捕获与先前模式不匹配的所有情况的方法:

public static Vector3Int GetVector(this Direction direction)
{
    return direction switch
    {
        Direction.up => Vector3Int.up,
        Direction.down => Vector3Int.down,
        Direction.right => Vector3Int.right,
        Direction.left => Vector3Int.left,
        Direction.forward => Vector3Int.forward,
        Direction.backwards => Vector3Int.back,
        _ => throw new Exception("Invalid direction provided.")
    };
}
Run Code Online (Sandbox Code Playgroud)

注意下划线

_ => throw new Exception("Invalid direction provided.")
Run Code Online (Sandbox Code Playgroud)

文档(与开关匹配的模式)解释道:

丢弃模式可用于与 switch 表达式的模式匹配。每个表达式(包括 null)始终与丢弃模式匹配。