2017-05-21 19 views
-1

以下のコードで何が間違っているかわかりません。私のリターンは機能していません。 私はコードでいくつかの詳細をコメントしました。メソッドが期待値を返さない

itemは、テキストファイルの行です。 「Port; 2302;

portTextBox.Text = Config_check(item, "Port", 1); 
    private string Config_check(string item, string contains, int i) 
    { 
     string part = "defualt"; 
     if (item.Contains(contains)) 
     { 
      MatchCollection Parts = Regex.Matches(item, @"(?i); *(.+?);(?-i)", RegexOptions.Singleline); 
      foreach (Match m in Parts) 
      { 
       part = m.Groups[i].Value; // sets part to '2302' 
       MessageBox.Show(part); // Shows '2302', Does open message box 
       return part; // Dosnt work 
      } 
      MessageBox.Show(part); // Shows 'Defualt' why?!?! 
      return part; // Dosnt work 
     } 
     MessageBox.Show(part); // Shows 'Defualt' why?!?! 
     return part; // returns 'Defualt' 
    } 
+0

デバッグしましたか?入力と正規表現が実行されておらず、期待どおりに異なる可能性があります。 – DigiFriend

+0

つまり、何が起きているのかについてのあなたのコメントは、正規表現が 'item'と一致しないことを示唆しています。 – DigiFriend

+0

"item"の値は何ですか?なぜ正規表現がそれに一致すると思いますか? – DigiFriend

答えて

0

ている例では、おそらくあなたの問題は、ループ内でreturn文です。あなたがあなたの方法から戻るならば、残りの方法はもう実行されません。だから、おそらくあなたがしなければならないすべては、内側リターンを削除することです。しかし

portTextBox.Text = Config_check(item, "Port", 1); 
private string Config_check(string item, string contains, int i) 
{ 
    string part = "defualt"; 
    if (item.Contains(contains)) 
    { 
     MatchCollection Parts = Regex.Matches(item, @"(?i); *(.+?);(?-i)", RegexOptions.Singleline); 
     foreach (Match m in Parts) 
     { 
      part = m.Groups[i].Value; 
      MessageBox.Show(part); 
     } 
     MessageBox.Show(part); 
    } 
    MessageBox.Show(part); 
    return part; 
} 

、私はあなたのコードの残りの部分を知っていないとして、それはまだ動作しない場合があります。

partにある唯一の値が、最後に保存された値になるように、foreachループ内にpartを上書きするので、これは実際には非常に良い試みではありません一致するのはPartsです。


EDIT

あなたは、foreachループをしたくない場合は、単に最後の項目を取ることができる:

portTextBox.Text = Config_check(item, "Port", 1); 
private string Config_check(string item, string contains, int i) 
{ 
    string part = "defualt"; 
    if (item.Contains(contains)) 
    { 
     MatchCollection Parts = Regex.Matches(item, @"(?i); *(.+?);(?-i)", RegexOptions.Singleline); 
     part = Parts.OfType<Match>().LastOrDefault() ?? "default"; 
     MessageBox.Show(part); 
    } 
    MessageBox.Show(part); 
    return part; 
} 

あなたは(明らかに)内部のメッセージボックスを削除することができますforeachループ。

+0

私はちょうどforeachループを取り除くことができる方法はありますか?私はそれを必要としません私はグループ[1]とにかくしたい – Jason1232

+0

ifステートメント内のMessageBox.Show(部分)ステートメントを削除することができます。 –

+0

@RuardvanElburgおそらくデバッグのために存在していたので、私はそれを削除しません。 – MetaColon

関連する問題