2013-01-21 101 views
1

我想創建與NDepend另一個自定義查詢,但無法弄清楚。查詢,計算新運營商

下面是僞代碼,我想查詢的內容:

var list 
foreach type t 
    int newCount = 0 
    foreach type u in t.TypesUsed 
     if "new"-operator of u is called anywhere within t 
      newCount++; 
    end foreach 
    list.Add(new Tuple<Type, int>(t, newCount)) 
end foreach 
return list  

我想知道有多少次「新」 - 運算符是一種內的任何地方調用。

我對NDepend查詢的語法很陌生。所以一些提示會幫助很多:)

謝謝!

回答

1

你可以試試這個查詢,對於每個類型t列出,在t代碼實例化的所有類型(即當其構造的一種是通過new操作稱爲類型實例化)。

from t in JustMyCode.Types 
let typesInstantiated = from tUsed in t.TypesUsed 
         where tUsed.Constructors.Any(c => c.IsUsedBy(t)) 
         select tUsed 
where typesInstantiated.Count() > 0 
select new { t, typesInstantiated } 

結果是這樣的:

Types instantiated

+0

我應該能夠改變這一點,以便它檢測到任何構造函數的調用(而不只是默認的構造函數)。非常感謝! – leifbattermann

+0

不客氣,順便說一句,我只是簡化了查詢使用Any()而不是FirstOrDefault()!= null –