我的任务是从.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一起。
答案 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();
}