除了一些不好的選擇,你的循環似乎很好。我想冒險NumOfRows
是不是正確計算。
表達式NumOfRows = (TotalTickets + (Columns - 1))/Columns;
應計算正確的行數。
另外,您應該使用屬性版本Count
而不是Linq擴展方法,並使用IList<T>.RemoveAt()
或List<T>.RemoveAt
而不是Remove(TicketList[T])
。
使用Remove()
要求枚舉列表以查找要刪除的元素,該列表可能與您定位的索引不同。更不用說,當您已經知道要刪除的正確索引時,您將掃描每次刪除呼叫的列表的50%(平均)。
前面列出的功能方法似乎是矯枉過正。
我試圖複製你的問題,假設使用中的各種變量的某些事實。該循環重複預期的次數。
static void TestMe()
{
List<object> TicketList = new List<object>();
for (int index = 0; index < 109; index++)
TicketList.Add(new object());
var rand = new Random();
int nColumns = 100;
int NumOfRows = (TicketList.Count + (nColumns - 1))/nColumns;
object[,] numbers;
int t;
numbers = new object[nColumns, NumOfRows];
for (int j = 0; j < NumOfRows; j++)
{
Console.WriteLine("OuterLoop");
for (int i = 0; i < nColumns; i++)
{
if (TicketList.Count > 0)
{
t = rand.Next(0, TicketList.Count - 1);
numbers[i, j] = TicketList[t];
TicketList.RemoveAt(t);
}
}
}
}
您看到的問題必須是您沒有包括在樣品中的問題的結果。
如何通過調試器逐步完成?或者添加一些'Trace'語句來看看它在做什麼? –
要清楚,你的外循環只執行一次** ** –
顯示'NumOfRows'的值。附註:最好先洗牌,然後再填充行... –