【发布时间】:2017-12-28 21:14:21
【问题描述】:
所以我不知道为什么它没有从 WebsiteList 中删除实际的字符串,这很奇怪,因为它确实从 ProxyList 中删除了。
调试时它说它确实删除了一些东西,因为在运行 webisteList.Remove(website); 后 websiteList.Count 变低了; 但它不会删除字符串,它会一直循环遍历相同的字符串。
foreach (var website in websiteList.ToArray())
{
var webSplit = website.Split(')');
foreach (var proxy in proxyList.ToArray())
{
if (proxyList.Count > 0)
{
if(websiteList.Count > 0)
{
var proxySplit = proxy.Split(':');
int Port;
bool convert = Int32.TryParse(proxySplit[1], out Port);
if (this returns true)
{
Console.WriteLine("Removing proxy");
proxyList.Remove(proxy);
websiteList.Remove(website);
}
if (this returns true)
{
Console.WriteLine("Removing proxy");
proxyList.Remove(proxy);
websiteList.Remove(website);
}
}
}
else
break;
}
}
【问题讨论】:
-
请发布您的实际代码。
if (this returns true)不是有效的 C#。如果您的问题是从websiteList中删除一个项目不会同时从您正在迭代的临时数组对象中删除它,请返回并重新考虑您首先调用ToArray()的原因。也就是说,假设你完全知道为什么要打电话给ToArray()。 -
无法修改循环中的列表。
-
此外,您在两个 if 块中都在做同样的事情(假设您的 'this 返回 true' 位只是代理代码或其他东西)。以这种方式重复代码是不好的。使用 || 将两个检查合并到一个 if 语句中运行这两项检查。
-
@EdPlunkett:
ToArray()是有道理的,因为您无法修改您正在枚举的集合。像这样枚举数组但从列表中删除。 -
@OlivierJacot-Descombes 我知道他为什么打电话给 ToArray。