MSDN example显示了这一点:
// 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);
}
答案 0 :(得分:3)
这两个代码段之间没有区别,假设readText
从未在其他任何地方使用过。
即使在第二种情况下,方法调用的结果最终也会存储在某处,即使该位置没有您可以在代码中引用的名称。
另一方面,如果你不做任何事情,只是遍历这些行,你可以使用ReadLines
而不是ReadAllLines
来传输文本行,而不是急切地加载整个行在处理任何行之前将文件存入内存。这样可以防止在访问第一行之前出现长时间延迟,如果在处理所有行之前最终退出循环,可以提供显着的速度提升(请记住,除了显式退出循环外,这可能由于异常而发生) ),即使你最终处理完所有的行,也会大大减少程序的内存占用。
答案 1 :(得分:2)
两个代码段是等效的。
更好的是,如果您按字符付款,则无需明确s的类型:
foreach (var s in File.ReadAllLines(path))
{
Console.WriteLine(s);
}
答案 2 :(得分:1)
如果以后不需要列表,则无需将结果存储在列表中。 我的猜测是,当在Release模式下构建时,编译器会优化它。
但是,第一种方法有一个优点:在调试过程中,您可以使用“自动”或“本地”窗口来检查变量的内容,这可能会有所帮助。
答案 3 :(得分:0)
foreach
方法的结果执行 File.ReadAllLines(path)
操作。所以他们都是一样的。