我正在编写一个简单的foreach循环来从appconfig文件中读取键值。由于某种原因,每次foreach循环递增时,名为server的数组字符串将丢失先前的值。程序运行完成后,我将值视为(server [0] = null,server [1] = null,server [2] =)。只有最后一个数组指针服务器[3]保留这些值。
我的问题是:
如何保留所有数组值并将它们传递到foreach循环之外?
private void button2_Click(object sender, EventArgs e)
{
int i = 0;
int max = 0;
string[] server;
foreach (string key in System.Configuration.ConfigurationManager.AppSettings)
{
max = max + 1;
}
foreach (string key in System.Configuration.ConfigurationManager.AppSettings)
{
server = new string[max];
server[i] = key;
MessageBox.Show(server[i]).ToString();
i = i + 1;
}
}
答案 0 :(得分:11)
server = new string[max];
应该在循环之外(在您的情况下,在两者之间),否则每次迭代都会创建一个新数组。这解释了为什么最后一个值是正确的,其余的都是空的。
此外,您可以使用++
代替i + 1
和max + 1
。
答案 1 :(得分:3)
Evan说 - 同样,考虑使用LINQ使代码更具可读性,并避免类似的错误:
var server = System.Configuration.ConfigurationManager.AppSettings
.Cast<string>().ToList();
foreach (string key in server)
MessageBox.Show(key);
答案 2 :(得分:0)
max = System.Configuration.ConfigurationManager.AppSettings.Count;