首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析代码文件中的#regions

解析代码文件中的#regions
EN

Stack Overflow用户
提问于 2011-01-22 13:51:03
回答 4查看 946关注 0票数 0

我正在尝试创建一个C#程序来提取*.cs文件中的#region标记中包含的代码。我或多或少只是希望能够修改我正在处理的代码,并让其他程序能够像文本一样访问它。

有没有什么已经存在的东西可以做到这一点?

假设我有这样的代码:

代码语言:javascript
复制
#region ClassName.Test()
public static void Test()
{
     //Some method that does stuff
}
#endregion

我希望能够提取出

代码语言:javascript
复制
public static void Test()
{
     //Some method that does stuff
}

当我指定要查找Class.Test()时,将*.cs作为string

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-22 14:33:52

如果你不担心嵌套的#regions。这段代码可以做到这一点。调用GetCodeRegions(),传入您的代码字符串(通过使用File.ReadAlltext获得),以获取所需区域内的代码片段列表。

代码语言:javascript
复制
    static void Main(string[] args)
    {
        var code = @"#region ClassName.Test()    //Some method that does stuff
            //some stuff
            #endregion

            #region ClassCName.Random()
            public static void Test()
            {
                 //Some more stuff
            }
            #endregion";

        List<string> codeRegions = GetCodeRegions(code);
    }

    private static List<string> GetCodeRegions(string code)
    {
        List<string> codeRegions = new List<string>();

        //Split code into regions
        var matches = Regex.Matches(code, "#region.*?#endregion", RegexOptions.Singleline);

        foreach (var match in matches)
        {
            //split regions into lines
            string[] lines = match.ToString().Split(new string[] { "\r\n" }, StringSplitOptions.None);

            if (lines.Length > 2)
            {
                codeRegions.Add(string.Join("\r\n", lines, 1, lines.Length - 2));
            }

        }

        return codeRegions;
    }
票数 4
EN

Stack Overflow用户

发布于 2011-01-22 14:02:47

如果你不介意潜在的麻烦问题,那么你可以简单地打开文件并搜索你正在寻找的关键字。

问题源于这样一个事实,即字符串可能包含您正在查找的信息,但并不意味着要进行搜索。您可以尝试忽略字符串,但这可能会变得有点复杂,因为“is”(\“、"”等)的所有使用方式都是如此。

如果您可以安全地忽略C#中的字符串,那么只需打开文本文件,逐行搜索您要查找的内容(string.Find)。

如果你想做正确的事情,那么使用CodeDOM是最好的选择!

票数 1
EN

Stack Overflow用户

发布于 2011-01-22 14:39:15

假设我们将整个代码放在一个字符串类code中

我们可以做到的

string[] regions =Regex.Split("#region",类代码);

现在,区域字符串数组将由您的区域代码组成,您可以在访问数组时访问这些区域代码。

您必须从array中的各个字符串中删除region name和#endregion,这不是很麻烦

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4766414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档