c# - 如何解析 C# 代码以找到类的派生类和接口(interface)

标签 c# regex parsing

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

我的意思是我有一个类

public class Class : BaseClass
{    
}

它被存储为一个字符串

string classString = "public class Class : BaseClass{}\r\n"

这个类肯定会更加详细,具有强类型、完全限定的基类和接口(interface)的潜力,但我需要一种方法来嗅探冒号和左大括号之间的代码。

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

public class LinkedList<K,T> : BaseClass
  **where K : IComparable**
{
}

然后可以安全地假设类定义中只有一个冒号,并且很容易找到派生冒号和左花括号。

如果是这样的话我可以做

    string baseClassString = classString.Substring(derivationColonIndex + 1, (openCurlyBraceIndex - (derivationColonIndex + 1)))

谁能想到一个更好的方法来保证我得到一个字符串用于 baseClass 以及冒号和左大括号之间可能存在的任何接口(interface)。

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

最佳答案

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

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

The CodeDOM provides types that represent many common types of source code elements. You can design a program that builds a source code model using CodeDOM elements to assemble an object graph. This object graph can be rendered as source code using a CodeDOM code generator for a supported programming language. The CodeDOM can also be used to compile source code into a binary assembly.

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

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

http://csparser.codeplex.com/

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

关于c# - 如何解析 C# 代码以找到类的派生类和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3136003/

相关文章:

c# - System.Web.Routing.RouteCollection 和 System.Web.Mvc.RouteCollectionExtensions 都具有相同的简单名称 'IgnoreRouteInternal'

python - 在 Python 中从字符串中删除反斜杠

json - 将 git 日志文件名解析为 json

c# - 从给定字符串中查找电话号码 C#

c# - 如何在直线上和曲线下填充所有内容?

c# - 请帮助减少 Xamarin.Android apk 大小

java - pattern.matcher() 和 pattern.matches()

java - 匹配完整文件正则表达式中的 A 部分,但不匹配 B 部分

java - 解析字符串以获取内容

apache-flex - 寻找用 AS3 编写的 CSS 解析器