我相信这是从Pattern Matching生成的语法的一部分。此功能的规范描述了语法以及更多示例。
PatternSyntax
在这里定义:http: //sourceroslyn.io/Microsoft.CodeAnalysis.CSharp/Generated/Syntax.xml.Internal.Generated.cs.html#b554fa43e6090c28
以下继承自PatternSyntax
DiscardPatternSyntax
DeclarationPatternSyntax
VarPatternSyntax
RecursivePatternSyntax
ConstantPatternSyntax
我相信一个例子VarPatternSyntax
如下var o
:
static object CreateShape(string shapeDescription)
{
switch (shapeDescription)
{
case var o when (o?.Trim().Length ?? 0) == 0:
// white space
return null;
default:
return "invalid shape description";
}
}
我们可以将上面的代码输入RoslynQuoter以查看如何生成它,它看起来像:
CasePatternSwitchLabel(
VarPattern(
SingleVariableDesignation(
Identifier("o"))),
Token(SyntaxKind.ColonToken))
.WithWhenClause(
WhenClause(
BinaryExpression(
SyntaxKind.EqualsExpression,
ParenthesizedExpression(
BinaryExpression(
SyntaxKind.CoalesceExpression,
ConditionalAccessExpression(
IdentifierName("o"),
MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
InvocationExpression(
MemberBindingExpression(
IdentifierName("Trim"))),
IdentifierName("Length"))),
LiteralExpression(
SyntaxKind.NumericLiteralExpression,
Literal(0)))),
LiteralExpression(
SyntaxKind.NumericLiteralExpression,
Literal(0)))))))