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

ISyntax接口中的DeclaringSyntaxReferences属性和Locations属性之间有什么区别?

答案的线索在评论部分:

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

这意味着, 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 NS{class C{int F; void M(int P}{}} 

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