0

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

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. 然后将新文件写入新文件夹。

    任何有关如何编写此类内容的建议将不胜感激。我只学习 C# 大约 3 到 4 个月,从语法上消化人们给彼此的所有指令可能有点不知所措。蒂亚!-埃文

编辑:所以,我确信任何正则表达式大师都在几秒钟内处理了这个问题,但无论如何我都会在这里发布我的解决方案,这是一个简单的查找和替换正则表达式字符串:

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

替换:[NamedType("$1")]\r\n public class $1 : SimpleObjectBase, ICCPSystemType {\r\n\r\n #region Static\r\n\r\n public static CollectionBase GetAll() {\r \n return new 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

4

1 回答 1

0

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

于 2013-06-28T05:50:39.997 回答