我发现这是什么似乎这需要在FixProvider进行处理。我已经开始了所需的通用代码。看来你需要看整个表达式中的错误,而不仅仅是问题的上下文。使用上下文,您可以找到整个表达式,或者想要查找错误的行或块。将块中的每个错误与要处理的错误进行比较。如果您发现会影响修复程序的修复程序,则可以在注册修复程序提供程序之前退出。我很乐意学习更简单的方法,但下面的代码确实有效。它可以缩短,但为了清晰和调试,当保持线条简单时更容易。
Public NotOverridable Overrides ReadOnly Property FixableDiagnosticIds As ImmutableArray(Of String) = ImmutableArray.Create(DiagnosticId.ERR_StrictDisallowsImplicitProc.ToDiagnosticId, DiagnosticId.ERR_StrictDisallowImplicitObject.ToDiagnosticId, DiagnosticId.ERR_NameNotDeclared1.ToDiagnosticId)
Public NotOverridable Overrides Async Function RegisterCodeFixesAsync(context As CodeFixContext) As Task
Dim root As SyntaxNode = Await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(False)
Dim Model As SemanticModel = Await context.Document.GetSemanticModelAsync(context.CancellationToken)
Dim firstDiagnostic As Diagnostic = context.Diagnostics.First()
Dim diagnosticSpanStart As Integer = firstDiagnostic.Location.SourceSpan.Start
Dim declarationSyntax As SyntaxNode = root.FindToken(diagnosticSpanStart).Parent.FirstAncestorOrSelfOfType(GetType(VariableDeclaratorSyntax))
If declarationSyntax IsNot Nothing Then
For Each DiagnosticEntry As Diagnostic In Model.GetDiagnostics(declarationSyntax.Span)
' Does Diagnostic contain any of the errors I care about?
If FixableDiagnosticIds.Any(Function(m) m.ToString = DiagnosticEntry.Id.ToString) Then
Continue For
End If
Exit Function
Next