我有一个程序,我必须检查是否有任何自动属性类型与类名匹配。
所以,例如,如果我有:
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”。问题是,我需要正则表达式从“List<User>
”获取“public List<User> HasRented {get; set;}
”。当然,我想获得所有的房产类型。所以我也希望两个“字符串”匹配正则表达式。
如果有任何帮助,我已经有一个获取属性名称的正则表达式,所以也许有人可以帮我修改它以获取属性类型?
REGEX: \ w +(?= \ s * {\ s * get \ b)
编辑:忘记提及我有源字符串,这就是为什么我想将它与正则表达式匹配。更清楚:我需要帮助的唯一的事情是正则表达式从包含一个充满自动属性的类的文本中获取属性类型。不匹配类名。
答案 0 :(得分:2)
使用正则表达式解析代码是没有用的,因为属性的类型不限于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]
答案 1 :(得分:1)
答案 2 :(得分:0)
^\s*public\s+([^\s]+)\s+[^\s]+\s+\{[^\}\n]+\}
将返回属性的类名称