目前,我試圖確定我的程序集中的哪些「控制器」類具有使用Reflection和LINQ與它們關聯的[Authorize]屬性。使用LINQ和反射:如何在我的程序集中查詢[Authorize]屬性中的所有類?
const bool allInherited = true;
var myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
var controllerList = from type in myAssembly.GetTypes()
where type.Name.Contains("Controller")
where !type.IsAbstract
let attribs = type.GetCustomAttributes(allInherited)
where attribs.Contains("Authorize")
select type;
controllerList.ToList();
此代碼幾乎可行。
如果我逐步跟蹤LINQ語句,我可以看到當我「懸停」我在LINQ語句中定義的「attribs」範圍變量填充了單個Attribute並且該屬性碰巧屬於AuthorizeAttribute類型。它看起來有點像這樣:
[-] attribs | {object[1]}
[+] [0] | {System.Web.Mvc.AuthorizeAttribute}
顯然,這條線在我的LINQ說法是錯誤的:
where attribs.Contains("Authorize")
,我應該怎麼寫那裏,而不是檢測是否「attribs」包含AuthorizeAttribute類型或不?
Riiiight。 「任何」方法。我知道「Contains」是錯誤的(因爲Intellisense不允許我寫Lambda表達式,但我無法弄清楚從列表中選擇哪種方法...) - 謝謝,夥計。我知道這是一個簡單的問題,有人可以立即指出。 – Pretzel 2010-06-10 17:04:39
@Pretzel沒問題 – luke 2010-06-10 17:08:39