C# 浏览列表并添加条件

C# 浏览列表并添加条件,c#,C#,我有一个函数返回ip列表和他的端口这是函数: public static List<ServerSocks> loadSocks() { var result = new List<ServerSocks>(); string fileSocks = Path.GetFullPath(Path.Combine(Application.StartupPath, "socks-list.txt")); var input = File.ReadAllT

我有一个函数返回ip列表和他的端口这是函数:

public static List<ServerSocks> loadSocks()
{
    var result = new List<ServerSocks>();
    string fileSocks = Path.GetFullPath(Path.Combine(Application.StartupPath, "socks-list.txt"));
    var input = File.ReadAllText(fileSocks);
    var r = new Regex(@"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})");
    foreach (Match match in r.Matches(input))
    {
        string ip = match.Groups[1].Value;
        int port = Convert.ToInt32(match.Groups[2].Value);

        ServerSocks bi = new ServerSocks();
        bi.IpAddress = IPAddress.Parse(ip);
        bi.Port = port;
        result.Add(bi);

    }
   return result;
}
公共静态列表loadSocks()
{
var result=新列表();
字符串fileSocks=Path.GetFullPath(Path.Combine(Application.StartupPath,“socks list.txt”);
var input=File.ReadAllText(fileSocks);
var r=newregex(@“(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})”;
foreach(r.Matches中的匹配(输入))
{
字符串ip=match.Groups[1]。值;
int port=Convert.ToInt32(match.Groups[2].Value);
ServerSocks bi=新的ServerSocks();
bi.IpAddress=IpAddress.Parse(ip);
bi.端口=端口;
结果:添加(bi);
}
返回结果;
}

我希望列表中的随机值作为我的oServer的代理设置

List<ServerSocks> list;       
List<ServerSocks> list = loadSocks();
SmtpServer oServer = new SmtpServer("");
foreach (var item in list)
{                                               
    oServer.SocksProxyServer = Convert.ToString(item.IpAddress);
    oServer.SocksProxyPort = item.Port;                  
}
列表;
List=loadSocks();

SmtpServer oServer=新的SmtpServer(“”); foreach(列表中的变量项) { oServer.SocksProxyServer=Convert.ToString(item.IpAddress); oServer.SocksProxyPort=item.Port; }
我喜欢这样,但他总是给我最后的ip和他的端口

我该怎么办


谢谢。

当您第一次进入循环并且所有连续运行都覆盖该值时,您设置了
oServer.SocksProxyServer
。它会在您的所有
列表中循环

如果要转换为
oServer
列表,则需要在循环外部创建一个新列表,并在循环内部执行此操作:

Add(新的OServer{socksproxy服务器=item.IpAddress.ToString(),socksproxy端口=item.Port})

如果你能更详细地解释你想发生什么,那就太好了。不过我希望这对你有帮助

编辑 你根本不需要一个循环。获取一个随机索引并检索相应的项就足够了

var oServer = new SmtpServer("");
var random = new Random();
var randomIndex = random.Next(list.Count);
var socks = list[randomIndex];
oServer.SocksProxyServer = socks.IpAddress;
oServer.SocksProxyPort = socks.Port;

为了实现您想要做的事情,请执行以下操作:

List<ServerSocks> list = loadSocks();

Random rnd = new Random();
int r = rnd.Next(list.Count);

oServer.SocksProxyServer = Convert.ToString(list[r].IpAddress);
oServer.SocksProxyPort = list[r].Port;                  
List List=loadSocks();
随机rnd=新随机();
int r=rnd.Next(list.Count);
oServer.SocksProxyServer=Convert.ToString(列表[r].IpAddress);
oServer.SocksProxyPort=列表[r]。端口;

然后它将从ServerSocks列表中获取一个随机对象并使用。

您的循环
foreach(列表中的var项)
将完全运行,因此它将以最后一项结束。您想要哪一项?foreach循环将循环并将oServer.socksProxy Server和oServer.socksProxy Port设置为列表中的各种值,但是如果您尝试在foreach循环之后获取对象属性,它将只提供最后一个,因为这是它为对象设置的最后一个值;oServer是smtp服务器类的一个实例,因此您希望
SmtpServer
对象在
列表中的每个项上都发生一些事情?是返回列表的值,我想影响列表返回的oServer.socksproxy服务器=ip和oServer.socksproxy端口=端口的属性。那么,是什么让最后一个值比第一个值更不可取呢?在我看来,您希望列表中的一个随机值作为
oServer
的代理设置。但是,如果您想设置代理,然后执行一些操作,转到下一个值,设置代理,执行一些操作,[…],那么您应该在设置代理设置后,在循环内部向
oServer
添加方法调用。如果我一直误解你的意图,我真的很抱歉。如果你看到SmtpServer oServer=newSMTPServer(“”),我会编辑我的代码;oServer是SmtpServerYes类的一个实例,但是如果您查看我的答案中的代码,这完全取决于您何时使用该oServer对象。我猜您稍后会尝试在代码中使用它,但在这种情况下,请将您所做的封装在foreach循环中。现在,它循环遍历列表中的所有值,并将oServer对象设置为ServerSocks列表的每个值,最后将其设置为最后一个值,当您以后使用该oServer对象时,它将仅具有列表中最后提供的值,除非您在foreach中执行所需的oServer,我想,如果我们知道您在代码中使用oServer对象的目的,我们将能够给您一个更清晰的答案。是否尝试使用不同的服务器发送电子邮件?我希望列表中的随机值作为我的oServer的代理设置