代码之家  ›  专栏  ›  技术社区  ›  tobeypeters

每次确认

  •  1
  • tobeypeters  · 技术社区  · 7 年前

    我相信,我知道答案。但是,试图得到确认。如果,您执行如下操作:

    foreach (string str in Directory.GetFileSystemEntries(path)) { Console.WriteLine(str); }
    

    而不是:

    string[] directoryEntries = Directory.GetFileSystemEntries(path);
    foreach (string str in directoryEntries) { Console.WriteLine(str); }
    

    在后台的directory.getfilesystementries(path)只执行一次,对吗?我假设它生成了,在这种情况下,必要的字符串[],然后循环。也有…

    1 回复  |  直到 7 年前
        1
  •  4
  •   aloisdg    7 年前

    是的,只执行一次。你是对的。如何检查?这是一个你可以写下来看的片段。

    public static void Main()
    {
        var ints = new int[]{0,2,5,8};
        foreach (var i in Print(ints))
        {
            Console.WriteLine(i);
        }
    }
    
    public static int[] Print(int[] numbers)
    {
        Console.WriteLine("Hello");
        return numbers;
    }
    

    输出为:

    Hello
    0
    2
    5
    8
    

    Try this demo online

    Hello 只打印一次!

    更好的方法是使用 debbuger 循序渐进。更先进的方法是阅读 MSIL :)