【问题标题】:foreach inside a foreach [closed]foreach 里面的 foreach [关闭]
【发布时间】:2015-08-20 08:45:33
【问题描述】:

我有一个包含文件夹中文件大小的数组,然后我有一个包含实际大小的列表。 gf.GameInformation 是一个包含文件名字符串和当前文件大小的字典。我想遍历文件中的每个元素并检查当前元素大小是否与gf.GameInformation 中的实际文件大小相同或不同,但是这种方法给了我一个奇怪的结果。

        FileInfo[] files = fileInfo.GetFiles();

        foreach (FileInfo i in files)
        {
            foreach(var x in gf.GameInfomation)
            {
                if (i.Length != x.Value)
                {
                    Console.WriteLine(i.Length);
                    break;
                }
            }
        }

【问题讨论】:

  • “但是这个方法给了我一个奇怪的结果。”你介意告诉我们这个问题吗?
  • 你得到什么结果,你期望什么?
  • 目前还不清楚究竟应该做什么,看起来像是一个XY问题。您的意思是要在gf.GameInformation 中找到与FileInfo i 对应的项目吗?你不需要嵌套的 foreach 循环。
  • 你看到了什么“奇怪的结果”?
  • 您的代码对我来说看起来不错。除非您告诉我们,否则我看不到任何“怪异”。

标签: c# for-loop foreach


【解决方案1】:

你的意思是这样的吗?

FileInfo[] files = fileInfo.GetFiles();

foreach (FileInfo i in files)
{
   if(gf.GameInfomation[i.Name] !=i.Length ) //Do something;
} 

或者如果你可以使用 Linq

FileInfo[] files = fileInfo.GetFiles();
files.Where(x=>gf.GameInfomation[x.Name] !=x.Length).ToList().ForEach(
//do Something
);

【讨论】:

  • 感谢您的回答。它就像我想要的那样工作。但我不太明白这个 gf.GameInfomation[i.Name] @Nickthename
  • 如果gf.GameInfomation是以文件名为key的字典,则可以直接通过文件名获取文件的实际大小。
【解决方案2】:

我假设您不想评估每个gf.GameInformation,而只想评估与FileInfo i 对应的那个。您可以按照以下方式做一些事情

FileInfo[] files = fileInfo.GetFiles();

foreach (FileInfo i in files)
{
    if (i.Length != gf.GameInfomation[i.Name].Value)
    {
        //Do something
    }
}

【讨论】:

  • 这很好用@ArthurRey,但我不太明白这一行:gf.GameInfomation[i.Name]
  • @LocDaiLe gf.GameInformationDictionnary。这是获取您当前正在循环的FileInfo i 的匹配值的方法。
  • 最后一个问题。为什么我的代码不起作用,@ArthurRey 有什么解释吗?
  • @LocDaiLe 请注意,我删除了一个foreach。您的代码所做的是将每个 FileInfo i 与每个 gf.GameInformation x 进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多