在 ForEach 中循环,但变量是什么
Looping in ForEach, but what is the Variable
我有一个出现故障的日志记录应用程序,我正在控制台线上工作以测试我的代码。当我意识到因为我从 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 (var 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) { }
以此类推
您正在代码的第二行创建一个 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 互换。
我有一个出现故障的日志记录应用程序,我正在控制台线上工作以测试我的代码。当我意识到因为我从 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 (var 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) { }
以此类推
您正在代码的第二行创建一个 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 互换。