2013-02-28 43 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