[英]Roslyn.. getting DescendantNodes
我對roslyn方法DescendantNodes()有問題。
var blockNodes = root.DescendantNodes(n => n.IsKind(SyntaxKind.Block))
在這種情況下,當我在調試模式下使用lambda表達式時,它可以工作。但是當我構建DLL並將其作為分析器連接到項目時,它就無法工作。
var nodes = root.DescendantNodes();
var blockNodes = nodes.Where(n => n.IsKind(SyntaxKind.Block));
問題出在哪里,我該如何解決?
我不知道為什么調試模式對您來說會有所不同。 但是,我認為您可能未正確使用方法DescendantNodes。
傳遞給DescendantNodes的函數是一個謂詞,它確定沿語法樹查找后代的算法是否繼續到給定節點的子代。 如果此函數返回false,則不會返回該語法樹路徑下的其他子級。
這與使用LINQ Where方法有很大的不同,后者將集合過濾為僅與謂詞匹配的節點。
例如,第一個可能會找到方法主體中的所有嵌套純塊,但找不到屬於其他類型的語句的任何塊,因為由於其他類型的語句本身並不是塊,因此將不再考慮這些塊。 但是,使用第二種形式(Where方法),該函數將考慮根目錄下的所有節點,從而找到所有塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.