gpt4 book ai didi

c# - NDepend:列出附加到方法的属性,这可能吗?

转载 作者:行者123 更新时间:2023-11-30 21:56:39 24 4
gpt4 key购买 nike

我正在尝试使用 NDepend 及其基于 Linq 的查询语言来生成一些有关代码当前状态的报告。我想用预定义的“标签”标记我的一些方法和类,例如标记为“数据库”的方法包含数据库特定代码,标记为“Algorithm_X”的方法包含与算法“X”相关的特定逻辑。我们认为这样的标记程序将导致更直接的文档生成过程。

我想知道 NDepend 是否提供了一种机制来促进这样的过程。我正在考虑使用 C# Attributes 来生成这样的自定义标签,然后使用对应于“标记”它们的适当属性来标记方法。我很清楚 CQLinq 的“.HasAttribute”方法并积极使用它。但是这个标记程序需要一种方法来列出或枚举所有附加到方法的属性,直到现在我才使用 NDepend 实现它。

我的问题是;有没有办法在 NDepend 中实现它(列出方法的所有属性)?如果没有,NDepend 中是否有另一种方法可以促进这种标记过程?我可以通过编写自定义 C# 代码使用 Reflections 来实现这一点,但我想确保在此状态下我无法使用 NDepend。

最佳答案

您实际上可以列出用 NDepend LINQ code querying (CQLINQ) 标记方法的属性但它既不直接也不快速。我们计划改进 NDepend 代码模型中的属性支持,它已在 NDepend User Voice 上被问及.

因此以下查询有效,但在大型代码库上可能需要几秒钟(这对于 NDepend 来说很慢,通常查询在几毫秒内执行):

let typesAttributes = Types.Where(t => t.IsAttributeClass)
from m in Methods
let mAttributes = typesAttributes.Where(t => m.HasAttribute(t)).ToArray()
where mAttributes .Length > 0
select new { m, mAttributes }

下面的优化通常会使它的运行速度提高一倍。

let typesAttributes = Types.Where(t => t.IsAttributeClass)
from m in Types.UsingAny(typesAttributes).ChildMethods()
let mAttributes = typesAttributes.Where(t => m.HasAttribute(t)).ToArray()
where mAttributes .Length > 0
select new { m, mAttributes }

关于c# - NDepend:列出附加到方法的属性,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com