使用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#不是很熟悉,但我认为在伪代码中,它可能如下所示:

  1. 打开文件夹中的每个.cs文件
  2. 读取每一行,直到找到匹配的正则表达式:"public class Something"
  3. 把"Something"的匹配项放在一个类似tempS的字符串中
  4. 在下面插入一些新行,如:"public static CollectionBase<"+tempS+">GetAll()"
  5. 然后将新文件写入新文件夹。

    任何关于如何写这样的东西的建议都将不胜感激。我只学习了大约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

使用RegEx将动态代码添加到类文件中

您正在尝试进行"元编程"
首先,你应该仔细检查泛型是否能解决你的问题。如果您实际上只是提取类名,那么干净的解决方案应该是泛型
对于T4模板,我建议查看.NET中元编程中的"介绍T4模板"示例,然后提出具体问题。