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));
}
这是我以前从未见过的 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));
}