【发布时间】:2013-03-14 08:46:01
【问题描述】:
我正在尝试查找具有指定属性的字段。我尝试修改 FirstQuickFix 示例,因为我认为这可能是一个很好的起点。但是如果我运行代码,什么都不会发生。任何想法我的主要问题是什么?
在阅读了项目概述和演练文档后,我的理解是,我能够请求令牌的属性,这是我在语法树中找到的。语法树是源代码的精确树表示。字段声明及其属性的连接可通过语义访问。还是我的理解完全错误?
[ExportCodeIssueProvider("FirstQuickFix_", LanguageNames.CSharp)]
class CodeIssueProvider : ICodeIssueProvider
{
public IEnumerable<CodeIssue> GetIssues
(IDocument document, CommonSyntaxNode node, CancellationToken cancellationToken)
{
var tokens = from nodeOrToken in node.ChildNodesAndTokens()
where nodeOrToken.HasAnnotations(Type.GetType("myAttribute"))
select nodeOrToken.AsToken();
foreach (var token in tokens)
{
var issueDescription = string.Format("found!!!");
yield return new CodeIssue(CodeIssueKind.Info, token.Span, issueDescription);
}
}
}
编辑:
我想要实现的,就是找到ie。所有具有 myAttribute 属性的字段:
namespace ConsoleApplication
{
class Program
{
[myAttribute]
string myField = "test";
public void testing()
{
Console.WriteLine(myField);
}
}
}
【问题讨论】:
-
我认为您混淆了注释和属性。注释是 Roslyn 的一个特性,可以用来标记语法树中的一些节点。它们与属性无关。
-
@svick 谢谢这是一个很好的提示,但是我如何访问或查找具有指定属性的所有字段?我将添加一个示例,我试图找到我的问题。
标签: c# attributes field roslyn