Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# 如何在单个MessageBox中显示foreach循环的所有迭代?_C#_Foreach_Messagebox - Fatal编程技术网

C# 如何在单个MessageBox中显示foreach循环的所有迭代?

C# 如何在单个MessageBox中显示foreach循环的所有迭代?,c#,foreach,messagebox,C#,Foreach,Messagebox,从下面的注释代码可以看出,我试图在消息框中的文件夹中显示每个文件的名称和校验和。问题是,这会为每个文件弹出一个单独的消息框,而不是在一个窗口中显示所有文件。我意识到我需要将MessageBox.Show()行移到foreach循环之外,但是它只显示最后一个文件,而不是所有文件 在一个消息框中显示所有文件的代码是什么 // for each file in selected folder, print out its name and MD5 checksum value foreach (

从下面的注释代码可以看出,我试图在消息框中的文件夹中显示每个文件的名称和校验和。问题是,这会为每个文件弹出一个单独的消息框,而不是在一个窗口中显示所有文件。我意识到我需要将MessageBox.Show()行移到foreach循环之外,但是它只显示最后一个文件,而不是所有文件

在一个消息框中显示所有文件的代码是什么

// for each file in selected folder, print out its name and MD5 checksum value
   foreach (string file in Directory.GetFiles(folderBrowserDialog1.SelectedPath))
   {
       using (var md5 = MD5.Create())
       {
           using (var stream = File.OpenRead(file))
           {
               checksum = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower();
               MessageBox.Show(file + ": " + checksum);
           }
       }
   }
在每次迭代期间使用,然后将文件/校验和附加到stringbuilder对象,然后在stringbuilder对象上调用
MessageBox.Show()
,例如:

StringBuilder s = new StringBuilder();
foreach (string file in Directory.GetFiles(folderBrowserDialog1.SelectedPath))
{
    using (var md5 = MD5.Create())
    {
        using (var stream = File.OpenRead(file))
        {
            checksum = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower();
            s.AppendLine(file + ": " + checksum);
        }
    }
}
MessageBox.Show(s.ToString());
或使用:

s.AppendFormat("{0}: {1}", file, checksum).AppendLine();
在循环内部,避免为循环的每次迭代创建新字符串的开销*贷记转到Destrictor*

使用a,然后在每次迭代期间将文件/校验和附加到stringbuilder对象,然后在stringbuilder对象上调用
MessageBox.Show()
,例如:

StringBuilder s = new StringBuilder();
foreach (string file in Directory.GetFiles(folderBrowserDialog1.SelectedPath))
{
    using (var md5 = MD5.Create())
    {
        using (var stream = File.OpenRead(file))
        {
            checksum = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower();
            s.AppendLine(file + ": " + checksum);
        }
    }
}
MessageBox.Show(s.ToString());
或使用:

s.AppendFormat("{0}: {1}", file, checksum).AppendLine();

在循环内部避免为循环的每次迭代创建新字符串的开销*贷记到Destrictor*

最简单的方法是创建一个列表变量并添加要显示的每个字符串。在foreach循环之后,添加一行:
MessageBox.Show(string.Join(Environment.NewLine,MyList.ToArray())

这应该可以做到。

最简单的方法是创建一个列表变量,并添加每个要显示的字符串。在foreach循环之后,添加一行:
MessageBox.Show(string.Join(Environment.NewLine,MyList.ToArray())

这应该就够了。

声明一个字符串变量怎么样
string foo=“”在循环之前,并将这行代码添加到循环内部:

foo += file + ": " + checksum + System.Environment.NewLine;
MessageBox.Show(foo);
在循环之后:

foo += file + ": " + checksum + System.Environment.NewLine;
MessageBox.Show(foo);

如何声明一个字符串变量
stringfoo=”“在循环之前,并将这行代码添加到循环内部:

foo += file + ": " + checksum + System.Environment.NewLine;
MessageBox.Show(foo);
在循环之后:

foo += file + ": " + checksum + System.Environment.NewLine;
MessageBox.Show(foo);

-1因为您应该知道,如果您处于for循环、while循环或foreach循环中,MessageBox每次都会显示。。我建议您查找如何使用string.Join()方法,并将MessageBox.Show()方法抛出foreach循环之外。我知道这一点。我是这么明确地说的…-1因为您应该知道,如果您处于for循环、while循环或foreach循环中,MessageBox每次都会显示。。我建议您查找如何使用string.Join()方法,并将MessageBox.Show()方法抛出foreach循环之外。我知道这一点。我明确地说了……我不喜欢你先使用stringbuilder,然后再使用
string+string
:+1如果你不喜欢它,那么就提供一个更好的解决方案DGibbs提供了一个很好的解决方案solution@DJKRAZE老实说,如果要在紧循环中使用纯字符串连接,我不认为使用stringbuilder有什么意义>.>@Destrictor在这种情况下,您会推荐什么作为替代方案?无论如何,编译器都会在内部使用StringBuilder…@Destrictor,不,如果它在一个循环中,肯定会这样做,在你的链接中也有一些答案可以证实这一点。虽然我很喜欢你的建议,但我认为OP没有那么重要(尽管他应该如此)。我在您的修订中编辑了我不喜欢您使用stringbuilder,然后使用
string+string
:+1编辑器如果您不喜欢,那么提供更好的解决方案DGibbs提供了一个很好的解决方案solution@DJKRAZE老实说,如果要在紧循环中使用纯字符串连接,我不认为使用stringbuilder有什么意义>.>@Destrictor在这种情况下,您会推荐什么作为替代方案?无论如何,编译器都会在内部使用StringBuilder…@Destrictor,不,如果它在一个循环中,肯定会这样做,在你的链接中也有一些答案可以证实这一点。虽然我很喜欢你的建议,但我认为OP没有那么重要(尽管他应该如此)。我已经在您的修订内容中进行了编辑。在许多情况下,“字符串+字符串”比StringBuilder.Append或string.Format()慢。@Offler谢谢您的提示!我最近才开始使用C#;我一定会研究StringBuilder类。在很多情况下,“string+string”比StringBuilder.Append或string.Format()慢。@Offler谢谢你的提示!我最近才开始使用C#;我肯定会研究StringBuilder类。