C# 使用foreach之前是否需要存储列表?

C# 使用foreach之前是否需要存储列表?,c#,foreach,C#,Foreach,这表明: // Open the file to read from. string[] readText = File.ReadAllLines(path); foreach (string s in readText) { Console.WriteLine(s); } 但我想: // Open the file to read from. foreach (string s in File.ReadAllLine

这表明:

    // Open the file to read from. 
    string[] readText = File.ReadAllLines(path);
    foreach (string s in readText)
    {
        Console.WriteLine(s);
    }
但我想:

    // Open the file to read from. 
    foreach (string s in File.ReadAllLines(path))
    {
        Console.WriteLine(s);
    }

这两个代码段是等效的

更好的是,如果您按角色付费,则无需明确说明s的类型:

foreach (var s in File.ReadAllLines(path))
{
    Console.WriteLine(s);
}

如果以后不需要列表,则无需将结果存储在列表中。 我的猜测是,在发布模式下构建时,编译器无论如何都会对此进行优化


但是,第一种方法有一个优点:在调试过程中,您可以使用“自动”或“本地”窗口检查变量的内容,这可能会有所帮助。

这两个代码段之间没有区别,假设
readText
从未在其他任何地方使用过

即使在第二种情况下,方法调用的结果最终也会存储在某个位置,即使该位置没有可以在代码中引用的名称


另一方面,如果您只想迭代这些行,那么可以使用
ReadLines
而不是
ReadAllLines
来流式传输文本行,而不是在处理任何行之前急切地将整个文件加载到内存中。这可以防止在访问第一行之前出现长时间延迟,在处理所有行之前退出循环的情况下,可以显著提高速度(请记住,除了显式退出循环之外,这可能是由于异常而发生的),即使您最终处理了所有的行,也会大大减少程序的内存占用。

foreach
操作是对
File.ReadAllLines(path)
方法的结果执行的。所以它们都是一样的。

是的,它们是等价的。Lol,+1表示按角色付费。