我有一个简单的文件阅读器,它可以读取多个 .cs 文件,搜索具有一个参数的特定方法。如果该方法存在,那么我只想抓取参数的名称。我正在考虑做一个 string.Compare(),但是我不知道如何获取参数开始的字符串的索引。
void NameOfTheMethod(string name)
{}
在这个例子中,我只想刮掉“名字”。
const string
编辑:在某些情况下,参数也可能是 a 。无论如何要绕过它?
我有一个简单的文件阅读器,它可以读取多个 .cs 文件,搜索具有一个参数的特定方法。如果该方法存在,那么我只想抓取参数的名称。我正在考虑做一个 string.Compare(),但是我不知道如何获取参数开始的字符串的索引。
void NameOfTheMethod(string name)
{}
在这个例子中,我只想刮掉“名字”。
const string
编辑:在某些情况下,参数也可能是 a 。无论如何要绕过它?
您可以使用正则表达式。就像是
NameOfTheMethod\(.*? (.*?)\)\s*?{
编辑:对您的示例进行测试,这将仅捕获name
(并且无论它是字符串、int、对象还是其他),而不是string name
编辑2:
完整示例:
//using System.Text.RegularExpressions;
String input = "void NameOfTheMethod(string name)" + Environment.NewLine + "{}";
Regex matcher = new Regex(@"NameOfTheMethod\(.*? (.*?)\)\s*?{");
Match match = matcher.Match(input);
if (match.Success)
Console.WriteLine("Success! Found parameter name: " + match.Result("$1"));
else
Console.WriteLine("Could not find anything.");
通过提供您按行检索代码,您将获得以下信息:
void NameOfTheMethod(string name)
在名为 cdLine 的变量中(例如)
尝试使用这些代码行
//Get Index of the opening parentheses
int prIndex = cdLine.IndexOf("("); // 20
//Cut the parameter code part
string pmtrString = cdLine.Substring(prIndex + 1);
pmtrString = pmtrString.Remove(pmtrString.Length - 1);//"string name"//"string name"
//Use this line to check for number of parameters
string[] Parameters = pmtrString.Split(',');
// If it is 1 parameter only like in your example
string[] ParameterParts = pmtrString.Split(' ');// "string", "name"
string ParameterName = ParameterParts[ParameterParts.Length - 1];// "name"
// The ParameterName is the variable containing the Parameter name
希望这可以帮助
这个正则表达式:
(?<=NameOfTheMethod\().+(?=\))
string name
如果之前NameOfTheMethod(
和之后将捕获)