我正在尝试创建一个C#程序来提取*.cs文件中的#region标记中包含的代码。我或多或少只是希望能够修改我正在处理的代码,并让其他程序能够像文本一样访问它。
有没有什么已经存在的东西可以做到这一点?
假设我有这样的代码:
#region ClassName.Test()
public static void Test()
{
//Some method that does stuff
}
#endregion我希望能够提取出
public static void Test()
{
//Some method that does stuff
}当我指定要查找Class.Test()时,将*.cs作为string。
发布于 2011-01-22 14:33:52
如果你不担心嵌套的#regions。这段代码可以做到这一点。调用GetCodeRegions(),传入您的代码字符串(通过使用File.ReadAlltext获得),以获取所需区域内的代码片段列表。
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;
}发布于 2011-01-22 14:02:47
如果你不介意潜在的麻烦问题,那么你可以简单地打开文件并搜索你正在寻找的关键字。
问题源于这样一个事实,即字符串可能包含您正在查找的信息,但并不意味着要进行搜索。您可以尝试忽略字符串,但这可能会变得有点复杂,因为“is”(\“、"”等)的所有使用方式都是如此。
如果您可以安全地忽略C#中的字符串,那么只需打开文本文件,逐行搜索您要查找的内容(string.Find)。
如果你想做正确的事情,那么使用CodeDOM是最好的选择!
发布于 2011-01-22 14:39:15
假设我们将整个代码放在一个字符串类code中
我们可以做到的
string[] regions =Regex.Split("#region",类代码);
现在,区域字符串数组将由您的区域代码组成,您可以在访问数组时访问这些区域代码。
您必须从array中的各个字符串中删除region name和#endregion,这不是很麻烦
https://stackoverflow.com/questions/4766414
复制相似问题