我的项目中有一个下拉列表,此代码提供列表值
CrawlIntervalList = new SelectList(new[] {1,2,3,4,5,6,7,8,9,10}, 2);
我正在尝试设置默认值2
。我认为这是默认值^,如果它似乎不起作用,如果没有,这个值意味着什么?
答案 0 :(得分: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