C# 使用RegEx向类文件添加动态代码

C# 使用RegEx向类文件添加动态代码,c#,regex,string,streamreader,streamwriter,C#,Regex,String,Streamreader,Streamwriter,我主要想知道如何编写一个简单的程序来解析文件夹中的所有类文件并进行一些更改。具体来说,我需要获取一个类文件,该类文件如下所示: public class Something { //somecode } 让它看起来像这样: public class Something { public static CollectionBase<Something> GetAll() { return new CollectionBase<Something>(DataLayer

我主要想知道如何编写一个简单的程序来解析文件夹中的所有类文件并进行一些更改。具体来说,我需要获取一个类文件,该类文件如下所示:

public class Something {

//somecode

}
让它看起来像这样:

public class Something {

public static CollectionBase<Something> GetAll() {
return new CollectionBase<Something>(DataLayer.Something.GetAll());

//somecode

}
公共类{
publicstaticcollectionbase GetAll(){
返回新的CollectionBase(DataLayer.Something.GetAll());
//一些代码
}
我基本上要在大约200个文件上做这个(除了一些其他的修改之外,但是如果我能做上面的修改,我也可以修改它来解决其他的修改)

我对c不太熟悉,但我认为在伪代码中可能会出现如下情况:

  • 打开文件夹中的每个.cs文件
  • 阅读每一行,直到找到与“public class Something”匹配的正则表达式
  • 将“Something”的匹配放在一个类似tempS的字符串中
  • 在下面插入一些新行,如:“publicstaticcollectionbase GetAll()”
  • 然后将新文件写入新文件夹

    任何关于如何写这样的东西的建议都将不胜感激。我只学了大约3-4个月的C#,从语法上消化人们给彼此的所有指令可能会有点难以承受。蒂亚!-埃文

  • 编辑:所以,我相信任何正则表达式大师都能在几秒钟内处理好这个问题,但我还是要在这里发布我的解决方案,这是一个简单的查找并替换正则表达式字符串:

    查找: 公共类(\w*):SimpleObjectBase{

    替换: [NamedType(“$1”)]\r\n公共类$1:SimpleObjectBase,ICCPSystemType{\r\n\r\n#region Static\r\n\r\n公共静态CollectionBase GetAll(){\r\n return new CollectionBase(CCP.Data.$1.GetAll());\r\n}\r\n\r\n\r\n#endregion

    下面是它的工作示例:

    以前-- 名称空间逻辑{

    ///<summary>
    ///This class represents each TypeBabySexByULS in the database
    ///</summary>
    [NamedType("TypeBabySexByULS")]
    public class TypeBabySexByULS : SimpleObjectBase {
    
    ///<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
    
    ///
    ///此类表示数据库中的每个TypeBabySexByls
    ///
    [NamedType(“TypeBabyseXbyls”)]
    公共类TypeBabySexByls:SimpleObjectBase{
    
    …///到其他代码上

    之后-- 名称空间逻辑{

    ///<summary>
    ///This class represents each TypeBabySexByULS in the database
    ///</summary>
    [NamedType("TypeBabySexByULS")]
    public class TypeBabySexByULS : SimpleObjectBase {
    
    ///<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
    
    ///
    ///此类表示数据库中的每个TypeBabySexByls
    ///
    [NamedType(“TypeBabyseXbyls”)]
    公共类TypeBabySexByls:SimpleObjectBase,ICCPSystemType{
    #区域静态
    publicstaticcollectionbase GetAll(){
    返回新的CollectionBase(CCP.Data.typebabysexbyls.GetAll());
    }
    #端区
    
    ///希望这能帮助其他人!-E

    您正在尝试进行“元编程”。
    首先,您应该仔细检查泛型是否解决了您的问题。如果您实际上只是提取类名,那么干净的解决方案应该是泛型。

    对于T4模板,我建议查看中的“介绍T4模板”示例,然后询问具体问题。

    我建议使用Visual Studio的正则表达式替换。在解决方案窗口中,筛选视图以仅显示文件。打开“查找所有”窗口(如果我记得正确,请按Ctrl+Shift+F)。按*.cs文件扩展名筛选搜索,并创建正则表达式以匹配筛选的解决方案视图的cs文件范围内的所有事件。有关Visual Studio正则表达式、捕获组以及如何在“替换”窗口中访问它们的详细信息,请查看是否需要更改200个文件以实现某些功能,您可能需要更多资金基本设计问题。您是否考虑过通过一种成熟的设计模式来解决问题?最好使用模板,例如T4。数据层是解决方案中的另一个项目,它包含所有进行数据访问的相应类文件。目前,我正在尝试修改业务逻辑层中的类文件。我正在尝试弄清楚如何使用捕获组将匹配项转换成字符串,这样我现在就可以执行伪步骤了,很难弄清楚:(我将查看模板(T4)因为我不知道你指的是什么。这一切基本上都是因为我的工作人员首先创建了数据库,然后使用代码生成实用程序生成所有类。我支持itsme86。与其向许多类添加相同的静态方法,不如在一个数据层类上尝试一个通用静态方法。