我在我的項目中的下拉列表,使用此代碼提供列表值的SelectList默認值
CrawlIntervalList = new SelectList(new[] {1,2,3,4,5,6,7,8,9,10}, 2);
我想設置的2
的默認值。我是否認爲這是默認值^,如果它不起作用,如果不是,這個值是什麼意思?
我在我的項目中的下拉列表,使用此代碼提供列表值的SelectList默認值
CrawlIntervalList = new SelectList(new[] {1,2,3,4,5,6,7,8,9,10}, 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
這真是棒極了!謝謝 – 2013-02-28 11:15:05
@JackAllen不客氣。如果它解決了你的問題,你可以接受這個答案:) – Botz3000 2013-02-28 11:20:26