如何解决Roslyn:检测何时使用“ using”声明了局部变量
我正在编写一个C#源生成器(类似于分析器),并且试图确定由于使用using指令声明了局部变量(ILocalSymbol)是否为只读。具体是以下情况:
using System;
struct Container : IDisposable
{
public void Dispose() {}
}
public class C {
public void M() {
using (var container = new Container())
{
var otherCon = new Container();
// I want to detect when the following would throw an error
//container = otherCon;
}
}
}
据我所知,Roslyn似乎没有任何公共API。 LocalSymbol具有IsUsing,但这是一个内部类型。与DeclarationKind相同。
解决方法
我发现这样做的唯一方法是检查变量的声明语法:
var isWritable = true;
var declaringSyntax = symbol.OriginalDefinition.DeclaringSyntaxReferences.FirstOrDefault();
if (declaringSyntax?.GetSyntax().Parent is VariableDeclarationSyntax
variableDeclarationSyntax && variableDeclarationSyntax?.Parent is UsingStatementSyntax)
isWritable = false;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。