我正在尝试为Collection初始化程序及其相应的Code Fix提供程序实现Diagnostic Analyzer。
错误的代码:
var sampleList= new List<string>();
sampleList.Add("");
sampleList.Add("");
CodeFix之后:
var sampleList= new List<string>(){"", ""};
但我一直坚持这个问题,一旦我获得了LocalDeclarationStatement的节点,我就不知道是否有办法从父节点获取下一个相邻节点。
在上面的图片中,我在分析LocalDeclarationStatement
后需要两个ExpressionStatement分析仪的要求
LocalDeclarationStatement
,一个已初始化但不包含CollectionInitializerExpression
Add
方法的Expression语句代码修复的要求
Add
方法的相邻Expression语句提供集合初始值设定项语法
答案 0 :(得分:3)
您可以执行以下操作:
var declarationStatement = ...;
var block = (BlockSyntax)declarationStatement.Parent;
var index = block.Statements.IndexOf(declarationStatement);
var nextStatement = block.Statements[index + 1];
答案 1 :(得分:1)
您是否只需要将具体块转换为列表,然后检查?
var nodes = yourSyntaxTree.DescentNodes().ToList();
for(var i = 0; i < nodes.Count; i++){
var localDeclarationStatement = nodes[i] as LocalDeclarationStatement;
if(localDeclarationStatement==null && i + 1 >= nodes.Length)
continue;
var expressionStatement = nodes[i+1] as ExpressionStatement;
if(expressionStatement==null)
continue;
// there you have it.
}