Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用foreach循环从数组中拾取所需的字?_C# - Fatal编程技术网

C# 如何使用foreach循环从数组中拾取所需的字?

C# 如何使用foreach循环从数组中拾取所需的字?,c#,C#,我想从给定的输入代码中选择所有类的类名。然而,我的代码只选择了一个类名。我该怎么办 我正在用C编写一个Windows窗体。我曾尝试用foreach循环来实现它,但它不起作用 private void btnDetect_Click(object sender, EventArgs e) { // splitting code string mystr = richTextBox1.Text; if (mystr.ToLower().Contains("class")) {

我想从给定的输入代码中选择所有类的类名。然而,我的代码只选择了一个类名。我该怎么办

我正在用C编写一个Windows窗体。我曾尝试用foreach循环来实现它,但它不起作用

private void btnDetect_Click(object sender, EventArgs e)
{
  // splitting code
  string mystr = richTextBox1.Text;
  if (mystr.ToLower().Contains("class"))
  {
    string[] splitText = mystr.Split(new char[] { ' ' });
    foreach (string word in splitText)
    {
      int classindex = Array.FindIndex(splitText, r => r.Contains("class"));
      string className = splitText[classindex + 1];
      MessageBox.Show(className);
    }
  }
  else
    MessageBox.Show("class not found");
  }
}
我希望输出显示输入中的所有类名,但我得到的输出只是第一个类名

数组。FindIndex始终返回第一个索引,因为条件从未更改

您可以使用:

string[] tokens = mystr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
List<string> classList = new List<string>();
for (int i = 0; i < tokens.Length - 1; i++)
{
    if (tokens[i].Equals("class", StringComparison.InvariantCultureIgnoreCase))
        classList.Add(tokens[++i]);
}

您可以使用以下方法:

    public IEnumerable<string> GetClasses(string str)
    {
        if (!str.Contains("Class", StringComparison.OrdinalIgnoreCase)) yield break;

        string[] words =str.Split(' ', StringSplitOptions.RemoveEmptyEntries);

        int wordsCount = words.Length;

        for (var index = 0; index < wordsCount; index++)
        {
            string word = words[index];
            if (!word.Equals("Class", StringComparison.OrdinalIgnoreCase)) continue;
            if (wordsCount > index + 1) continue;
            if (words[index + 1].Equals("Class", StringComparison.OrdinalIgnoreCase)) continue;

            yield return words[index + 1];
        }
    }

您能发布示例输入和预期输出吗文本是什么样子的?您的findindex会找到第一个。。。它总是只会找到第一个,只会为找到的每一个类显示它。你不是想检查word是否为类,而是显示数组中的下一项吗?显示一些示例输入文本,然后我们可以测试和修复你的代码。还考虑使用字符串函数如DexFox来查找Case.public类方{公共双面{{GET;} public quare双面{侧=边}}}公共类圆{public双半径{{get;}公共循环双半径{RADIUS=RADIUS;}}返回的所有实例。System.Collection.Generic.List'1[System.String]