在ForEach中循环,但是变量是什么

时间:2015-12-23 21:06:38

标签: c# foreach configurationmanager

我有一个出现故障的日志记录应用程序,我正在使用控制台行来测试我的代码。当我意识到我从COnfigurationManager获取信息时,我不知道我的FOR Each中的变量是什么?

string machineNamesConfig = ConfigurationManager.AppSettings["MachineNames"];
var machineNames = new List<string>(machineNamesConfig.Split(','));
machineNames = machineNames.OrderBy(i => i).ToList();
foreach (??? m in machineNames)
{

}

5 个答案:

答案 0 :(得分:4)

要回答您的问题,该变量名为&#34; m&#34;。

您正在寻找的是变量的类型。您可以让编译器使用var来推断,就像在Mike Schwartz的回答中一样。您也可以使用string,因为您知道machineNames是字符串列表:

foreach (string m in machineNames)
{
    //...
}

在foreach循环中声明的变量的类型可以是var,或者它可以是您正在迭代的集合的元素类型,或者它可以是元素类型的任何子类型。这可能不是一个很好的理由,但如果你想要,你也可以做以下其中一项:

foreach (object m in machineNames) { }
foreach (IEnumerable<char> m in machineNames) { }

等等。

答案 1 :(得分:2)

试试这个:

 foreach (var m in machineNames)
 {

 }

答案 2 :(得分:1)

您在代码的第二行创建List<string>,然后对其进行排序,然后再次创建列表。

然后,machineNames列表中的对象类型应为string

无论如何,您也可以使用var并忘记类型,因为编译器会为您完成工作。

答案 3 :(得分:0)

以下是更好的,也是更好的,因为你正在迭代字符串列表,即使你将对象分配给var变量machineNames,它仍然是string,只是你懒得定义适当的变量。另外,如果有人看你的代码,乍一看,他会知道你在迭代什么,这是有道理的。

foreach (string m in machineNames)
 {

 }

以下也有效。

foreach (var m in machineNames)
 {

 }

快速注意:使用var而非string没有区别。它实际上只是一种编码风格。编译器为两个变体生成完全相同的内容。也没有性能差异。

答案 4 :(得分:0)

你实际上可以把这整件事当作一个班轮:

foreach (var machineName in ConfigurationManager.AppSettings["MachineNames"].Split(',').OrderBy(i => i)) 
{

}

正如大家所说,var可与string互换。