for循环不能使用Count()

时间:2015-03-10 10:26:04

标签: c# for-loop

我创建了一个程序,用于复制zip存档中的目录和一些文件。

因此,当我启动程序时,没有存档。 我试图放置一个断点,它显示for循环正在跳过。为什么呢?

for (int i = 0; i == steamPath.Count(s => s != null); i++)
{
    string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    ZipFile zip = new ZipFile();
    zip.AddFile(Path.Combine(path[i], "folder"));
    foreach (string f in Directory.GetFiles(path[i]))
    {
        string fileName = Path.GetFileName(f);
        if(fileName.StartsWith("name"))
        {
            zip.AddFile(Path.Combine(path[i], fileName));
        }
    }
    zip.Save(Path.Combine(appData, "File[" + i + "].zip"));
}

2 个答案:

答案 0 :(得分:6)

如果计数超过i == steamPath.Count(s => s != null)true将永远不会产生0因此,循环将会中断。

试试这个:

i < steamPath.Count(s => s != null)

for循环运行,只要条件为true,而不是,直到true

另一种选择是使用foreach

foreach (var path in steamPath.Where(s => s != null)))
{ }

答案 1 :(得分:0)

如果您正在尝试进行蒸汽登录,那么有一些更容易实现的方法就是我要说的。 / ID / avvulous

我建议在你运行循环之前过滤掉你的steamPath数组中的'null',然后你可以使用'foreach'循环来使你的工作变得更容易,它们是两个单独的工作,而你'没有正确地组合它们。

            List<string> steamPathsNoNull = new List<string>();

            foreach (string s in steamPaths)
            {
                if (s != null)
                {
                    steamPathsNoNull.Add(s);
                }
            }

            int i = 0;

            foreach (string s in steamPathsNoNull)
            {
                string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
                ZipFile zip = new ZipFile();
                zip.AddFile(Path.Combine(s, "config"));
                foreach (string f in Directory.GetFiles(s))
                {
                    string fileName = Path.GetFileName(f);
                    if (fileName.StartsWith("ssfn"))
                    {
                        zip.AddFile(Path.Combine(s, fileName));
                    }
                }

                zip.Save(Path.Combine(appData, "Steam[" + i + "].zip"));

                i++;
            }