Foreach循环和数组值
本文关键字:数组 循环 Foreach | 更新日期: 2023-09-27 18:06:23
我正在编写一个简单的foreach循环从appconfig文件中读取键值。由于某种原因,每次foreach循环增加时,名为server的数组字符串都会丢失先前的值。一旦程序运行完成,我看到的值为(server[0] =null, server[1]=null, server[2] =)。只有最后一个数组指针服务器[3]保留了这些值。
我的问题是:
- 为什么服务器[0]和服务器[1]变成null
-
如何保留所有数组值并将它们传递到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; } }
server = new string[max];
应该在循环之外(在您的示例中,在两者之间),否则每次迭代都会创建一个新数组。这就解释了为什么最后一个值是正确的,而其余的都是空的。
也可以用++
代替i + 1
和max + 1
Evan说的——还有,考虑使用LINQ使你的代码更易读,并避免类似的bug:
var server = System.Configuration.ConfigurationManager.AppSettings
.Cast<string>().ToList();
foreach (string key in server)
MessageBox.Show(key);
Evan完全正确。除此之外,我建议将第一个foreach循环替换为
max = System.Configuration.ConfigurationManager.AppSettings.Count;