我有一个出现故障的日志记录应用程序,我正在使用控制台行来测试我的代码。当我意识到我从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)
{
}
答案 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互换。