簡體   English   中英

Roslyn ..獲取DescendantNodes

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM