c# - 如何从foreach中获取数据并在while和do while中重用?

问题描述

在 Foreach 中,数据完全循环,但是当数据发送到 while 时,它​​仅显示每个数据的单个字符,例如:确切数据是:“John”但在我的代码中它显示:J 然后下一个 O,H,N 直到精确数据的每个字符完成。下面的代码示例:

foreach (DataGridViewRow row in DataGrid2.Rows)
            {                  
                bool isSelected = Convert.ToBoolean(row.Cells["ChkOkay"].Value);
                if (isSelected)
                {
                    value += row.Cells["EnrollName"].Value.ToString(); 
                    Console.Writeline("Selected Values " + value);
                }
            }
            while (v < value.Length())
            {                   
                    do
                    {     
        //It display single character only instead whole name.                  
                        MessageBox.Show("Name: "value[v] + "Slot: " + u);
                    foreach (var chari in value[v].ToString())
                    {
            //I re use the data here from 1st foreach
                }                        
                    v++;
                    u += 51;   
                    } while (u < 5559);

解决方法

字符串可以像数组一样被索引。将字符串视为数组(并在方括号中添加索引器)返回字符串中该位置的字符。"John"[0]'J'。您的 value 是单个字符串,而不是字符串数组。

有了这个:

value += row.Cells["EnrollName"].Value.ToString();

您正在使 string value 变得越来越长。如果您的网格有 3 行包含“mark”、“luke”和“john”,则您的 value 最终为 "marklukejohn"

如果你然后循环它,你可以一次将它发送一个字符

我怀疑您想将字符串作为整个字符串(其中 3 个)保留在数组(或列表)中.. 在这种情况下:

var names = new List<string>();
foreach ....

  names.Add(row.Cells["EnrollName"].Value.ToString())

然后您可以稍后遍历列表并将名称作为完整字符串提取

while (v < names.Count)
{                                    
    MessageBox.Show("Name: " + names[v] + "Slot: " + u);

您的代码充满语法错误,无法编译。除非问题与编译器错误有关

,否则请在发布之前尝试让代码正常工作 ,

我不明白你的代码,但正确的形式是将一列 DataGrid 行放在一个列表中。

然后打印列表元素,然后检查每个列表项的字符。

List<string> EnrollNameList = new List<string>();
foreach (DataGridViewRow row in DataGrid2.Rows)
{
    bool isSelected = Convert.ToBoolean(row.Cells["ChkOkay"].Value);
    if (isSelected)
    {
        string colValue = row.Cells["EnrollName"].Value.ToString();
        EnrollNameList.Add(colValue);
        Console.WriteLine("Selected Values " + colValue);
    }
}
int v = 0;
while (v < EnrollNameList.Count)
{
   //message box show whole EnrollName            
   MessageBox.Show("Name: " + EnrollNameList[v]);
   foreach (var chari in EnrollNameList[v])
   {
      //get each char in EnrollName
   }
   v++;
}