使用RegEx将动态代码添加到类文件中
本文关键字:文件 添加 代码 RegEx 动态 使用 | 更新日期: 2023-09-27 18:20:08
我基本上想知道如何编写一个简单的程序,解析文件夹中的所有类文件并进行一些更改。具体来说,我需要获取一个类文件,它看起来像:
public class Something {
//somecode
}
让它看起来像这样:
public class Something {
public static CollectionBase<Something> GetAll() {
return new CollectionBase<Something>(DataLayer.Something.GetAll());
//somecode
}
我基本上必须在大约200个文件上做这件事(还有一些其他修改,但如果我能做到以上几点,我也可以定制它来解决其他更改)。
我对c#不是很熟悉,但我认为在伪代码中,它可能如下所示:
- 打开文件夹中的每个.cs文件
- 读取每一行,直到找到匹配的正则表达式:"public class Something"
- 把"Something"的匹配项放在一个类似tempS的字符串中
- 在下面插入一些新行,如:"public static CollectionBase<"+tempS+">GetAll()"
然后将新文件写入新文件夹。
任何关于如何写这样的东西的建议都将不胜感激。我只学习了大约3-4个月的C#,从语法上消化人们相互给出的所有指令可能会有点让人不知所措。TIA-Evan
编辑:所以,我相信任何正则表达式专家都能在几秒钟内处理好这件事,但我还是要在这里发布我的解决方案,这是一个简单的查找和替换正则表达式字符串:
查找:公共类(''w*):SimpleObjectBase{
替换:[NamedType("$1")]''r''n公共类$1:SimpleObjectBase,ICCPSystemType{''r''n''r''n#region Static''r''n''r''n公共静态CollectionBase GetAll(){''r''n返回新CollectionBase(CCP.Data.$1.GetAll());''r''n}''r''n''r''n#endregion
下面是它的工作示例:
之前--命名空间CCP.Logic{
///<summary>
///This class represents each TypeBabySexByULS in the database
///</summary>
[NamedType("TypeBabySexByULS")]
public class TypeBabySexByULS : SimpleObjectBase {
///到其他代码
之后--命名空间CCP.Logic{
///<summary>
///This class represents each TypeBabySexByULS in the database
///</summary>
[NamedType("TypeBabySexByULS")]
public class TypeBabySexByULS : SimpleObjectBase, ICCPSystemType {
#region Static
public static CollectionBase<TypeBabySexByULS> GetAll() {
return new CollectionBase<TypeBabySexByULS>(CCP.Data.TypeBabySexByULS.GetAll());
}
#endregion
///希望这能帮助其他人-E
您正在尝试进行"元编程"
首先,你应该仔细检查泛型是否能解决你的问题。如果您实际上只是提取类名,那么干净的解决方案应该是泛型
对于T4模板,我建议查看.NET中元编程中的"介绍T4模板"示例,然后提出具体问题。