如何解析C#代码以查找类的派生类和接口

Bra*_*onS 1 c# regex parsing

我正在寻找一种方法来查找基类标识符冒号和类的开头大括号之间的代码,该类已被存储到字符串文字中.

我的意思是说我有一堂课

public class Class : BaseClass
{    
}
Run Code Online (Sandbox Code Playgroud)

它被存储为字符串

string classString = "public class Class : BaseClass{}\r\n"
Run Code Online (Sandbox Code Playgroud)

这个类肯定会更加详细,具有强类型,完全限定的基类和接口的潜力,但我需要一种方法来嗅出冒号和开放花括号之间的代码.

假设该类不是定义派生约束的泛型,即

public class LinkedList<K,T> : BaseClass
  **where K : IComparable**
{
}
Run Code Online (Sandbox Code Playgroud)

那么可以安全地假设在类定义中会有一个冒号,并且很容易找到派生冒号和开口大括号.

如果是这样我就能做到

    string baseClassString = classString.Substring(derivationColonIndex + 1, (openCurlyBraceIndex - (derivationColonIndex + 1)))
Run Code Online (Sandbox Code Playgroud)

任何人都可以想到一个更好的方法,保证我得到一个baseClass字符串和冒号和开口大括号之间可能存在的任何接口.

我需要这个的背景:基于来自数据库的数据生成类,如果db中的某些数据发生变化,那么我可能需要更改类字符串中的继承.因此,我将替换基类和接口的现有子字符串.

cod*_*ife 5

伙计,你真的应该使用CodeDOM:

http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx

CodeDOM提供了代表许多常见类型的源代码元素的类型.您可以使用CodeDOM元素设计构建源代码模型的程序来组装对象图.可以使用CodeDOM代码生成器将此对象图表呈现为源代码,以支持编程语言.CodeDOM还可用于将源代码编译为二进制程序集.

我想提请你注意对象图.使用对象图,您应该能够做您需要做的事情.

编辑:抱歉误导,实际上你想要完成的是与我的建议相反 - 我的坏!您可能希望查看以下项目,这些项目提供了从代码构建对象图的功能,而不是从对象图生成代码:

http://csparser.codeplex.com/

http://wiki.sharpdevelop.net/Default.aspx?Page=NRefactory&NS=&AspxAutoDetectCookieSupport=1