static void Test1() { var sv = new ServerConfig[] { new ServerConfig{Name="A", Weight = 4}, new ServerConfig{Name="B", Weight = 2}, new ServerConfig{Name="C", Weight = 1} }; int index = 0; int sum = sv.Sum(m => m.Weight); for (int i = 0; i < 100; i++) { index = NextServerIndex(sv); System.Console.WriteLine("{0}{1}", sv[index].Name, sv[index].Weight); } } public struct ServerConfig { //初始权重 public int Weight { get; set; } //当前权重 public int Current { get; set; } //服务名称 public string Name { get; set; } } public static int NextServerIndex(ServerConfig[] serverConfigArray) { int index = -1; int total = 0; int size = serverConfigArray.Count(); for (int i = 0; i < size; i++) { serverConfigArray[i].Current += serverConfigArray[i].Weight; total += serverConfigArray[i].Weight; if (index == -1 || serverConfigArray[index].Current < serverConfigArray[i].Current) { index = i; } } serverConfigArray[index].Current -= total; return index; }