我是一個初學者程序員,需要一些幫助。在我的節目開始時,創建了5個兔子(物體類型兔子)。它看起來像這樣:暫停,直到對象創建成功
List<Bunny> bunnies = new List<Bunny>();
Bunny newBunny;
for(int i = 0; i < 5; i++)
{
newBunny = new Bunny();
bunnies.Add(newBunny);
}
我的問題是newBunny的構造花費時間太長,程序繼續for-loop。這將導致清單剛纔的第一個構建newBunny和it.Running的重複的代碼打印我下面的:
名稱 - 凱特,性別男,色白,年齡0,放射性假
名稱 - 凱特,性別男,色白,年齡0,放射性假
名稱 - 凱特,性別男,色白,年齡0,放射性假
名稱-Kate,性別 - 男性,顏色 - 白色,年齡0,放射性錯誤
名稱 - 凱特,性別男,色白,年齡0,放射性假
建設看起來是這樣的:
public Bunny()
{
Random randNum = new Random();
int namesCount = Enum.GetNames(typeof(BunnyName)).Length;
Name=((BunnyName)(randNum. Next(0, namesCount)));
int genderCount = Enum.GetNames(typeof(BunnyGender)).Length;
Gender=((BunnyGender)(randNum. Next(0, genderCount)));
int colorCount = Enum.GetNames(typeof(BunnyColor)).Length;
Color=((BunnyColor)(randNum. Next(0, colorCount)));
Age=-1;
if(randNum. Next(1,101)<2)
Radioactive = true;
else
Radioactive =false;
}
我希望程序暫停,直至建設newBunny結束,然後纔將其添加到列表中:
List<Bunny> bunnies = new List<Bunny>();
Bunny newBunny;
for(int i = 0; i < 5; i++)
{
//stop until next line finishes
newBunny = new Bunny();
//continue
bunnies.Add(newBunny);
}
Ps。如果我正在調試程序,它運行得很好,就像我希望它(新的兔子不'重複') 另外,如果我在for循環的末尾添加messageBox,一切正常。 這就是爲什麼我認爲這可能需要停止
for(int i = 0; i < 5; i++)
{
//stop until next line finishes
newBunny = new Bunny();
//continue
bunnies.Add(newBunny);
MessageBox.Show("test");
}
希望你明白我的問題,謝謝。
「我的問題是newBunny的建設時間太長,程序與for循環,這將導致該列表繼續剛纔的第一個構建newBunny和它的複製品。」不,這是不正確的。目前尚不清楚爲什麼你會這麼想,但事實並非如此。請提供一個簡短但完整的程序來說明問題,我們可以幫助您診斷問題。還要注意,通過在循環內而不是外部聲明變量*,代碼會更好(IMO),一般來說,使用局部變量的最小可能範圍。 – 2015-02-08 19:48:17
你是如何確定它是同一個對象的? – Tarik 2015-02-08 19:55:00
如果使用在構造函數內部啓動的非阻塞線程(用於初始化對象的屬性),可能會導致此行爲,但如果您是新程序員,則不太可能會這樣做。 – Aalawlx 2015-02-08 19:57:03