在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)
{
}

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

要回答您的问题,变量被称为"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互换。