0

1 つのパラメーターを持つ特定のメソッドを検索する多数の .cs ファイルを読み取る単純なファイル リーダーがあります。そのメソッドが存在する場合は、パラメーターの名前だけをスクレイピングします。string.Compare() を実行することを考えていましたが、引数が始まる文字列のインデックスに到達する方法がわかりません。

void NameOfTheMethod(string name)
{} 

この例では、「名前」のみを削り取りたいと考えています。

編集: パラメータはconst string、場合によっては a になることもあります。とにかくそれをバイパスするには?

4

3 に答える 3

2

正規表現を使用できます。何かのようなもの

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.");
于 2013-10-30T14:01:03.320 に答える
1

コードを行ごとに取得すると、次のようになります。

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

お役に立てれば

于 2013-10-30T14:19:14.990 に答える