查找哪个函数使用某个属性
本文关键字:属性 函数 查找 | 更新日期: 2023-09-27 18:29:04
我正在阅读一个开源c#项目,在一些基本类中,有很多自定义属性,如下所示:
[Parameter("aaa", typeof(int), "this is aaa")]
[Parameter("bbb", typeof(bool), "this is bbb")]
[Serializable]
public class Number : DataElement
{
...
}
现在我需要了解这些自定义属性,但没有文档。所以我需要找到哪个函数是基于这些自定义属性来做事情的。通过阅读这些函数,我可以理解其中的含义。
是否有一种彻底的方法来定位项目中的函数,该函数将根据某些自定义属性进行操作?
属性用于向代码元素(如类)添加元数据。任何代码都可以通过.NET反射读取此元数据,如本答案所示。
有些属性由编译器读取(如[Serializable]
),有些属性由特定的.NET框架读取,如ASP.NET MVC(如[Route]
,仅在调用RouteTable.Routes.MapMvcAttributeRoutes()
时有效),您可以为自己的目的创建自定义属性。
通常,我建议您阅读有关您感兴趣的特定属性的文档,以了解它的作用。如果您需要查看使用它的代码,可以使用.NET Reflector或ILSpy等工具(假设您知道该代码在哪个.NET程序集中,请再次通过文档)。
如果你能解释为什么需要它,这可能会有所帮助,因为知道什么函数查找特定的属性似乎没有多大好处(除非它是你自己的自定义属性),只要你知道它的用途。
访问以下URL后,您将非常清楚。
- 5分钟内的C#属性
- 属性教程
我建议您在某个地方编写一段代码,然后输出到文件、控制台或调试器。
首先,您需要循环遍历每个类型上的每个方法,然后检查它是否具有您要查找的属性。我想是ParameterAttribute
。
例如:
var methods = assembly.GetTypes()
.SelectMany(t => t.GetMethods())
.Where(m => m.GetCustomAttributes(typeof(ParameterAttribute), false).Length > 0)
.ToArray();
foreach (var assemblyMethod in methods)
{
Console.WriteLine(assemblyMethod.Name);
// or do other stuff here
}
有关获取自定义属性的更多信息,请阅读此处。此外,这是反射的一部分,您可以在这里了解更多关于的信息