如何在单个MessageBox中显示foreach循环的所有迭代
本文关键字:循环 迭代 foreach 显示 单个 MessageBox | 更新日期: 2023-09-27 17:57:39
正如您从下面注释的代码中看到的,我正在尝试在消息框中的文件夹中显示每个文件的名称和校验和。问题是,这会为每个文件弹出一个单独的消息框,而不是将它们全部显示在一个窗口中。我意识到我需要将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,然后在每次迭代期间将文件/校验和附加到字符串生成器对象,然后在字符串生成器对象上调用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*
最简单的方法是创建一个List变量并添加要显示的每个字符串。在foreach循环之后,添加一行:MessageBox.Show(string.Join(Environment.NewLine,MyList.ToArray()));
这就行了。
在循环之前声明一个字符串变量string foo = "";
,并将这行代码添加到循环内部:
foo += file + ": " + checksum + System.Environment.NewLine;
循环后:
MessageBox.Show(foo);