2013-02-28 80 views
0

我在我的項目中的下拉列表,使用此代碼提供列表值的SelectList默認值

CrawlIntervalList = new SelectList(new[] {1,2,3,4,5,6,7,8,9,10}, 2);

我想設置的2的默認值。我是否認爲這是默認值^,如果它不起作用,如果不是,這個值是什麼意思?

回答

2

這裏的問題是SelectList不是通用的,所以它使用object作爲項目類型。當您將int傳遞給期望object的方法時,該int會自動裝箱。該拳擊操作將該int的值包含在新的object中,並將其放在堆上。每次將值類型(如int)分配給類型爲object的變量時,或者如果嘗試將值類型傳遞給預期爲int的方法,此拳擊操作都會再次發生。

第二個參數似乎是默認值,但2你通過正在盒裝,這就造成object一個新的實例。與此同時,陣列中的數字也正在裝箱(IEnumerable也與object一起使用)。儘管這兩個裝箱操作是分開進行的,並且您陣列中的2和作爲第二個參數傳遞的2在堆上的不同位置結束爲不同的object。因此,SelectList沒有辦法發現這兩個2是指同一個對象。

解決方法是讓這個裝箱操作只發生一次。

您可以通過手動選擇默認的元素,或者使用object[]解決這個問題:

object[] values = new object[] {1,2,3,4,5,6,7,8,9,10}; 
CrawlIntervalList = new SelectList(values, values[1]); 

這並不是說,通過創建一個object[],在它的所有整數被裝箱爲object,從而創造引用。通過傳遞values[1]作爲第二個參數,確保將正確的引用傳遞給構造函數。在拳擊

此處瞭解詳情:
http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

+0

這真是棒極了!謝謝 – 2013-02-28 11:15:05

+0

@JackAllen不客氣。如果它解決了你的問題,你可以接受這個答案:) – Botz3000 2013-02-28 11:20:26