2010-02-26 12 views
4

是否可以使用對象初始值設定項在一行中執行以下操作(例如,初始化bool數組並將所有元素設置爲true)?是否可以在bool上使用Object Initializers?

int weeks = 5; 
bool[] weekSelected = new bool[weeks]; 
for (int i = 0; i < weeks; i++) 
{ 
    weekSelected[i] = true; 
} 

我不能很好地工作。


編輯:我應該提到我使用VS2008與.NET 2.0(所以Enumerable將無法正常工作)。

+1

除了代碼不能用當前形式工作,你確實有一個錯字,第二行應該是:bool [] weekSelected ... – thelsdj 2010-02-26 22:52:02

回答

9

bool[] weekSelected = Enumerable.Range(0, 5).Select(i => true).ToArray();

編輯:如果你不能用枚舉,您可能能夠使用BitArray

BitArray bits = new BitArray(count, true); 

,然後複製到陣列需要:

bool[] array = new bool[count]; 
bits.CopyTo(array, 0); 
+0

這是一個很好的答案,但我使用VS2008的.NET 2.0,所以Enumerable在那裏不存在。我更新了這個問題。 – AngryHacker 2010-02-26 22:48:47

3

如果您使用.NET 2.0,則使用循環是正確的方法。我不會改變它。


原始回答。

您的類型聲明是錯誤的。試試這個:

bool[] weekSelected = new bool[] { true, true, true, true, true }; 

你也可以做到這一點,以避免重蹈自己:

bool[] weekSelected = Enumerable.Repeat(true, 5).ToArray(); 

請注意,這並不像一個循環一樣高效,但如果你有100個數值和性能不是關鍵,它比循環更簡潔,輸入也比{ true, true, true, ... }更少。

+0

儘管使用初始化方法,但是這不允許你傳遞大小數組 – 2010-02-26 22:46:07

+0

「周」實際上是一個變量。我不會提前知道價值會是什麼。我應該說得更清楚。 – AngryHacker 2010-02-26 22:46:44

2

這應該是你在找什麼:

bool[] weekSelected = Enumerable.Repeat<bool>(true, weeks).ToArray();