ISymbol.DeclaringSyntaxReferences和ISymbol.Locations之间的区别

时间:2016-08-04 19:26:47

标签: c# roslyn roslyn-code-analysis

DeclaringSyntaxReferences界面中的Locations属性和ISyntax属性有什么区别?

1 个答案:

答案 0 :(得分:4)

答案的线索在<remarks>评论部分:

  

声明符号的语法节点。如果符号在元数据中声明或者是隐式声明的,则返回一个空的只读数组。

这意味着,Locations还返回元数据引用声明和隐式声明的位置。您可以在LocationsTests.cs文件中看到相关证据:

var c = s.GetTypeMembers("C", 0).Single() as NamedTypeSymbol;
var obj = c.BaseType;
Assert.Equal("MetadataFile(CommonLanguageRuntimeLibrary)", obj.Locations[0].ToString());

其中cclass C

namespace N.S{class C{int F; void M(int P}{}}

所以objSystem.Object。这是有道理的,因为您没有任何实际的源代码,因此编译中的语法将定义System.Object