Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查找Roslyn中的类中未使用的变量declare?_C#_Roslyn - Fatal编程技术网

C# 如何查找Roslyn中的类中未使用的变量declare?

C# 如何查找Roslyn中的类中未使用的变量declare?,c#,roslyn,C#,Roslyn,在Roslyn中,如何确定类中是否未使用私有成员变量 我的任务是注释任何未使用的私有变量。例如: class Test { private int I;// if it's not use then i need to comment it out. } 编译器(如VS.NET中所示)肯定会发出警告,您也可以从Roslyn(已找到)获得警告 对于更深入的代码分析,我建议使用更高级的工具,例如编译器。创建语义模型并将其传递给Main方法中的重写器类构造函数 SemanticModel sm

在Roslyn中,如何确定类中是否未使用私有成员变量

我的任务是注释任何未使用的私有变量。例如:

class Test
{
   private int I;// if it's not use then i need to comment it out.
}
编译器(如VS.NET中所示)肯定会发出警告,您也可以从Roslyn(已找到)获得警告


对于更深入的代码分析,我建议使用更高级的工具,例如编译器。

创建语义模型并将其传递给Main方法中的重写器类构造函数

SemanticModel sm = Compilation.Create("StylecopImplementor")
    .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"))
    .AddSyntaxTrees(fileTree).GetSemanticModel(fileTree);

Rewriter syntaxwr = new Rewriter(sm);
我向重写器类公开了我的语义模型

class Rewriter : SyntaxRewriter
{
    SemanticModel model { get; set; }
    IEnumerable<Diagnostic> diagonists;

    public Rewriter(SemanticModel pModel)
    {
        model = pModel;             
        diagonists = pModel.GetDiagnostics();
    }
}

如果您的.cs文件未使用,它将对该文件中的变量声明进行注释。

因此,您希望对所有变量声明进行注释,这些变量声明为:1。是否在声明位置未初始化?2.未在声明类型内赋值?@AlexFilipovici-我想注释未使用的变量表示类中未使用的变量。您是否想过如果该变量被其他类使用会发生什么情况?你能提供一个例子吗?我只想注释类中的局部变量而不是全局变量。我在问题中添加了示例。谢谢你,我使用警告来实现这个。
if (diagonists.Count() > 0)
{
    var diagitems = diagonists.Where(d => d.Info.MessageIdentifier.ToString().Equals("CS0168")).ToList();

    if (diagitems != null)
    {
        var ditem = diagitems.Where(d => d.Location.GetLineSpan(false).StartLinePosition.Line == node.GetLocation().GetLineSpan(false).StartLinePosition.Line).FirstOrDefault();

        if (ditem != null)
        {
            node = node.WithLeadingTrivia(Syntax.ParseTrailingTrivia("//"));                            
        }
    }
}

return base.VisitVariableDeclaration(node);