浏览列表并添加条件

时间:2015-09-01 08:53:31

标签: 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.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;
}

我希望列表中的随机值成为我的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;                  
}

我喜欢这样,但他总是给我最后的ip和他的端口。

我该怎么办?

谢谢。

2 个答案:

答案 0 :(得分:1)

当您第一次进入循环并且所有连续运行都覆盖该值时,您会设置oServer.SocksProxyServer。它会循环显示您的所有List<ServerSocks>

如果要转换为oServer列表,那么您将在循环外创建一个新列表并在循环内执行此操作:

Add(new OServer { SocksProxyServer=item.IpAddress.ToString(), SocksProxyPort=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;

答案 1 :(得分:0)

为了实现您想要的目标,请执行以下操作:

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;                  

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