查找哪个函数使用某个属性

本文关键字:属性 函数 查找 | 更新日期: 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
}

有关获取自定义属性的更多信息,请阅读此处。此外,这是反射的一部分,您可以在这里了解更多关于的信息