我在我的项目中的下拉列表,使用此代码提供列表值的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