在ForEach中循环,但变量是什么
本文关键字:变量 是什么 循环 ForEach | 更新日期: 2023-09-27 18:27:58
我有一个日志应用程序出现故障,我正在控制台上测试我的代码。当我意识到,由于我从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)
{
}
要回答您的问题,变量被称为"m"。
您要查找的是变量的类型。您可以让编译器通过使用var
来推断,就像Mike Schwartz的答案一样。您也可以使用string
,因为您知道machineNames
是字符串列表:
foreach (string m in machineNames)
{
//...
}
foreach循环中声明的变量的类型可以是var
,也可以是正在迭代的集合的元素类型,或者可以是元素类型的任何子类型。可能没有一个好的理由这样做,但如果你愿意,你也可以做以下之一:
foreach (object m in machineNames) { }
foreach (IEnumerable<char> m in machineNames) { }
等等。
试试这个:
foreach (var m in machineNames)
{
}
您将在代码的第二行创建一个List<string>
,然后对其进行排序,然后再次创建一个列表。
接下来,machineNames
列表中的对象类型应该是string
。
无论如何,您也可以使用var而忽略类型,因为编译器将为您完成工作。
以下内容更好,更可取,因为您正在迭代字符串列表,即使您将对象分配给var变量machineNames
,它仍然是string
,只是您懒得定义合适的变量。此外,如果有人看了你的代码,第一眼就会知道你在迭代什么。
foreach (string m in machineNames)
{
}
以下内容也适用。
foreach (var m in machineNames)
{
}
快速提示:使用var
与使用string
没有区别。这实际上只是一种编码风格。编译器为两种变体生成完全相同的结果。性能也没有差异。
实际上,您可以将整件事作为一行代码:
foreach (var machineName in ConfigurationManager.AppSettings["MachineNames"].Split(',').OrderBy(i => i))
{
}
正如大家所建议的,var可以和string互换。