【发布时间】:2012-08-11 11:53:34
【问题描述】:
我想匹配(从类文件中选择)方法名、属性名和字段名。
这是示例类:
class Perl
{
string _name;
public string Name { get; set; }
public Perl()
{
// Assign this._name
this._name = "Perl";
// Assign _name
_name = "Sam";
// The two forms reference the same field.
Console.WriteLine(this._name);
Console.WriteLine(_name);
}
public static string doSomething(string test)
{
bla test;
}
}
我得到了方法的代码:
(?:public|private|protected)([\s\w]*)\s+(\w+)\s*\(\s*(?:\w+\s+(\w+)\s*,?\s*)+\)
我有问题:
- 上面的正则表达式代码获取了所有方法,它工作得很好,但是 我也希望它选择方法名称但没有参数和 访问器。所以从 exaplmce 类使用我的代码结果将是: public Perl() 和 public static doSomething(string test) 但我想要那种结果:Perl() 和 doSomething( )。所以 - 我的代码匹配得很好,但我希望结果像我一样显示 写在上一句。
- 如何选择属性?显示结果:类型和属性 姓名。所以从 exaple 类结果将是: string Name
- 如何选择具有结果的字段:键入字段名称。万一它 将是:字符串_名称
【问题讨论】:
-
可能与this SO answer重复
-
在编译的类上使用反射而不是代码文件上的正则表达式是否有意义?您将获得更可靠的结果(即您不必担心您的正则表达式命令是否涵盖所有可能的情况),并且它可以与任何 .NET 语言一起使用,而不仅仅是 C#。
-
所以我得到了带有 .cs 类文件的文件夹。我可以“在空中”编译它然后使用反射吗?例如,如何动态编译类是否有我可以使用的函数?例如。在按钮上单击comile所选文件夹中的所有cs文件?
标签: c# regex properties methods match