名单中的ForEach并非全部定位

时间:2018-07-17 20:02:00

标签: c#

所以我目前有一个程序,可以将项目添加到列表中,例如 用户名,索引,然后在下面的此代码中向索引添加一个。只会在最近添加的项目中添加一个。

Console.WriteLine("There are currently: " + AntiSpam.Count);
int Index = 0;
foreach (string s in AntiSpam)
{
    Console.WriteLine("Found User: " + s.Split(',')[0]);
    AntiSpam[Index] = s.Split(',')[0] + "," + (int.Parse(s.Split(',')[1]) + 1).ToString();
    Index++;
}

基本上这将返回数据当前有:10 找到的用户:某人。然后,它将再次转到此代码的另一个循环,并再次显示相同的结果。

编辑 通过使用此代码,我设法使代码正常工作

        for (var i = 0; i < AntiSpam.Count; i++)
        {
            AntiSpam[i] = AntiSpam[i].Split(',')[0] + "," + (int.Parse(AntiSpam[i].Split(',')[1]) + 1).ToString();
            Console.WriteLine("Text is {0}", AntiSpam[i]);
        }

但是,如果可能的话,我想知道为什么它起作用而第一个不起作用

1 个答案:

答案 0 :(得分:0)

如果您要为列表建立索引,只需执行for而不是foreach。这样可以避免使用(和可能造成混淆)使用单独的变量来跟踪AntiSpam.IndexOf(s)的问题,而这基本上就是您试图对Index进行的操作:

Console.WriteLine("There are currently: " + AntiSpam.Count);
int index;
string s;
for(int i=0; i < AntiSpam.Count, i++)
{
    string[] parts = AntiSpam[i].Split(',');
    username = parts[0];
    Console.WriteLine("Found User: " + username);
    if (parts.Length > 1)
    { 
        index = int.Parse(parts[1])
        AntiSpam[i] = username + "," + (index + 1).ToString();
    }
}