【发布时间】:2010-06-28 20:47:06
【问题描述】:
我正在寻找一种方法来查找基类标识符冒号和已存储到字符串文字中的类的左大括号之间的代码。
我的意思是我有一门课
public class Class : BaseClass
{
}
它被存储为一个字符串
string classString = "public class Class : BaseClass{}\r\n"
该类肯定会更详细,具有强类型、完全限定的基类和接口的潜力,但我需要一种方法来嗅探冒号和左大括号之间的代码。
假设类不是定义派生约束的泛型 即
public class LinkedList<K,T> : BaseClass
**where K : IComparable**
{
}
那么可以安全地假设类定义中只有一个冒号,并且很容易找到派生冒号和左大括号。
如果是这样的话我可以这样做
string baseClassString = classString.Substring(derivationColonIndex + 1, (openCurlyBraceIndex - (derivationColonIndex + 1)))
谁能想到一个更好的方法来保证我得到一个基类的字符串以及冒号和左大括号之间可能存在的任何接口。
为什么我需要这个的背景:类是根据来自数据库的数据生成的,如果数据库中的某些数据发生变化,那么我可能需要更改类字符串中的继承。因此,我将替换基类和接口的现有子字符串。
【问题讨论】:
-
哇,这听起来真是个坏主意,伙计。我同意 Stefan 的观点,如果你不打算使用反射,这是 RegEx 的工作。神速。
-
字符串中的文本有什么限制?是否保证是有效的 C#?它可以包含 cmets 吗?它可以包含“预处理器”指令吗?多种类型声明?嵌套类型声明?属性?
-
都是非常有效的点。 Stefan - 很多时候,在有人给出可行的解决方案之前,我已经自己解决了这个问题。在提出问题 1 年多后,我的问题得到了回答,并且可能忽略了给予某人他们可能应得的荣誉。我知道这是一个社区,它为人们作为聪明的程序员提供声望和荣誉,并允许他们有时能够自吹自擂,虽然我不是真的在这里,但我会更加努力。
-
至于 RegEx,我希望不要走那条路,因为每次我遇到使用 RegEx 的需要时,我都必须重新学习它,但我想这就是我可能不得不做。
-
Eric - 很可能不会有任何限制。该代码保证是有效的 c#,因为它已经生成。没有 cmets 或预处理器指令。几乎在所有情况下,它都会继承一些父类。我希望这足够简单,不必处理正则表达式或任何太棘手的事情。