Roslyn 显式 IInstanceReferenceExpression Kind 而不是 This
Roslyn Explicit IInstanceReferenceExpression Kind instead of This
当我获取 type Instance() => this;
实例类型的 IInstanceReferenceExpression 操作时,类型是 Explicit
,但我希望类型是 This
。我是不是遗漏了什么或者这是 Roslyn 中的错误?
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Semantics;
using System;
using System.Linq;
internal static class so39495857
{
private static void Main()
{
var tree = CSharpSyntaxTree.ParseText(@"
class c
{
c Instance() => this;
static void Main() {}
}
");
var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create(null, new[] { tree }, new[] { mscorlib });
var model = compilation.GetSemanticModel(tree);
var node = tree.GetRoot().DescendantNodes().OfType<ArrowExpressionClauseSyntax>().First();
var operation = model.GetOperation(node);
var block = (IBlockStatement)operation;
var @return = (IReturnStatement)block.Statements.First();
var @this = (IInstanceReferenceExpression)@return.ReturnedValue;
Console.WriteLine(@this.InstanceReferenceKind);
}
}
项目 github - https://github.com/isanych/so-39495857
这就是 Explicit
的意思。
当我获取 type Instance() => this;
实例类型的 IInstanceReferenceExpression 操作时,类型是 Explicit
,但我希望类型是 This
。我是不是遗漏了什么或者这是 Roslyn 中的错误?
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Semantics;
using System;
using System.Linq;
internal static class so39495857
{
private static void Main()
{
var tree = CSharpSyntaxTree.ParseText(@"
class c
{
c Instance() => this;
static void Main() {}
}
");
var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create(null, new[] { tree }, new[] { mscorlib });
var model = compilation.GetSemanticModel(tree);
var node = tree.GetRoot().DescendantNodes().OfType<ArrowExpressionClauseSyntax>().First();
var operation = model.GetOperation(node);
var block = (IBlockStatement)operation;
var @return = (IReturnStatement)block.Statements.First();
var @this = (IInstanceReferenceExpression)@return.ReturnedValue;
Console.WriteLine(@this.InstanceReferenceKind);
}
}
项目 github - https://github.com/isanych/so-39495857
这就是 Explicit
的意思。