获取具有特定属性的属性(及时编译)

时间:2019-06-24 08:16:40

标签: c# reflection properties attributes

我的任务是从.cs文件中查找具有某些属性的属性。因此,我得到了.cs文件,并且必须在其中搜索某些属性并将其保存为XML。

因此,每个具有属性[ID]的属性都应将值与ID一起存储。 在上下文中,我应该如何实现使用“及时编译器”和“反射”一词。但是我不知道如何开始,因为我以前从未使用过即时编译器/反射。

首先,我使用正则表达式进行了尝试,但是在那里我无法获取属性。将.cs文件加载为字符串时,如何获取属性值? (或者我应该怎么做?) 我搜索的.cs文件:

[ID(12345678)]
public string quack {get; set}

我尝试过的脚本:

string document = File.ReadAllText(@"FilePath.cs");
    var searchPatternID = @"(?<![\p{Zs}\t]*//.*)(?<!/\*(?:(?!\*/)[\s\S\r])*?)\[[\n\r\s]*ID(.*?\n*?)*?\]";

    var matches = Regex.Matches(document, searchPatternID );

     foreach (var m in matches)
     {
         Console.WriteLine(m);
     }

在这里,我仅搜索ID。如何获取“ quack”的值?

我期望的是

[ID(12345678)]
public string quack {get; set}

public string wuff {get; set}

在这里,我期望quack的值和ID一起。

2 个答案:

答案 0 :(得分:1)

您可以使用此代码

var properties = typeof(MyClass).GetProperties();
        var specificProperty = properties.Where(t => t.CustomAttributes.Any(y => y.AttributeType.FullName == "MyTestAttribute")).ToList()
            .Select(z=>z.CustomAttributes).ToList();
        var values = specificProperty.Select(s => s.First().ConstructorArguments.First().Value).ToList();

答案 1 :(得分:0)

如果要获取ID属性,则必须通过typeof().GetType()获取CustomAtributes。

var attributes = typeof(YourClass).CustomAttributes;

然后,您可以查找属性及其值或所需的任何内容。

因此,您可以获取所有属性,然后查找属性:

    var properties = typeof(YourClass).Properties();
    foreach (var prop in properties)
    {
        prop.CustomAttributes.CheckAttribute();
    }