c# switch 关键字的使用方式与我以前见过的不同

c# switch keyword used in a different way than I have seen before

这是我以前从未见过的 switch 关键字的用法:

public TestUserType UserType { get; private set; } = TestUserType.None;

public override Task<AuthenticationState> GetAuthenticationStateAsync()
        {
            var task = this.UserType switch
            {
                TestUserType.Admin => Task.FromResult(new AuthenticationState(this.Admin)),
                TestUserType.User => Task.FromResult(new AuthenticationState(this.User)),
                TestUserType.None => Task.FromResult(new AuthenticationState(this.Anonymous)),
                _ => Task.FromResult(new AuthenticationState(this.Visitor))
            };
            return task;
        }

谁能解释一下 'switch' 的用法?我检查了文档,但我只找到了通常的 switch (var) 用法。

这被称为 switch expression。不同于传统的switch statements,switch expressions return a value.

此外,它们支持诸如 pattern matching 之类的概念,这是一种比传统 case 语句(过去)所允许的语法更具表现力的语法。但正如 Hans 在下面指出的那样,switch 语句也支持模式匹配。

旧符号中的等价物:

    switch(UserType)
    {
        case TestUserType.Admin: 
            return Task.FromResult(new AuthenticationState(this.Admin));
        case TestUserType.User:
            return Task.FromResult(new AuthenticationState(this.User));
        case TestUserType.None:
            return Task.FromResult(new AuthenticationState(this.Anonymous));
        default:
            return Task.FromResult(new AuthenticationState(this.Visitor));        
    }