Regex以匹配属性类型C#

本文关键字:类型 属性 Regex | 更新日期: 2023-09-27 18:19:41

我有一个程序,我必须在其中检查是否有任何自动属性类型与类名匹配。

例如,如果我有:

public class User 
{
   //Some code here
}

public class Cars
{
  public string Brand {get; set;}
  public string YearModel {get; set;}
  public List<User> HasRented {get; set;}
}

现在,我已经有了匹配类名的代码,所以我可以从"public class User"中获得名称"User"。问题是,我需要正则表达式从"public List<User> HasRented {get; set;}"中获取"List<User>"。当然,我想得到所有的属性类型。因此,我还希望正则表达式中的两个"字符串"匹配。

如果有什么帮助的话,我已经有了一个regex,它可以获取属性的名称,所以也许有人可以帮我修改它,以获取属性的类型?

REGEX:''w+(?=''s*{''s*get''b)

EDIT:忘了把源代码作为字符串,这就是为什么我想用regex来匹配它。需要特别说明的是:我唯一需要帮助的是regex,它可以从包含一个填充了自动属性的类的文本中获取属性类型。与类名不匹配。

Regex以匹配属性类型C#

使用正则表达式解析代码是没有用的,因为属性的类型不限于1级泛型,可以是任何类似的类型

List<SortedList<string, User>>

在这种情况下,最好让C#编译器(csc)来做这项工作。

我认为代码当然可以编译,因为您的源代码缺少System.Collections.Generic所需的using语句;

以下是编译源代码的代码:

    CSharpCodeProvider prov = new CSharpCodeProvider();
    CompilerResults results = prov.CompileAssemblyFromFile(new System.CodeDom.Compiler.CompilerParameters(), new string[] { "c:''temp''code.txt" });
    if (results.Errors.Count == 0)
    {
        Assembly assembly = results.CompiledAssembly;
        foreach (Type type in assembly.GetTypes())
        {
            Console.WriteLine("Type: {0}", type.Name);
            foreach (PropertyInfo pi in type.GetProperties())
            {
                Console.WriteLine("    Property: {0}, Return Type: {1}", pi.Name, pi.PropertyType);
            }
        }
    }

这是输出:

Type: User
Type: Cars
    Property: Brand, Return Type: System.String
    Property: YearModel, Return Type: System.String
    Property: HasRented, Return Type: System.Collections.Generic.List`1[User]

您可以使用获取名称和类型

(?<type>[^'s]+)'s(?<name>[^'s]+)(?='s'{get;)

演示或者只键入:

('S+(?:<.+?>)?)(?='s'w+'s'{get;)

演示

带有修饰符global和multiline的regex ^'s*public's+([^'s]+)'s+[^'s]+'s+'{[^'}'n]+'}将返回属性的类名