在下面的代码中,我希望对System.Action类型的两个引用都表示为QualifiedNameSyntax,但第二个引用表示为MemberAccessExpressionSyntax。
那是对的吗?如果是这样,为什么不能是 a QualifiedNameSyntax?
class Foo
{
public void M(object o)
{
var t = typeof(System.Action); // 1
switch(o)
{
case System.Action: // 2
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
一般来说,您只会在 Roslyn 语法树中获得 QualifiedNameSyntax,其中唯一合法的东西是限定名称;在这些情况下,我们运行一个受限的解析器,它只能理解限定名称。我们正在运行通用表达式解析器,它将吐出其中的任何表达式,并且我们将在绑定过程中找出它实际上是什么。因为考虑另一种情况,例如:
SomeEnum e;
switch (e)
{
case SomeEnum.Blue: Console.WriteLine("Blue!"); return;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,SomeEnum.Blue 绝对是对成员的访问。但在绑定之前我们实际上并不知道“SomeEnum”是什么,所以我们总是使用 MemberAccessExpression。
| 归档时间: |
|
| 查看次数: |
562 次 |
| 最近记录: |