我的项目中有一个下拉列表,此代码提供列表值
CrawlIntervalList = new SelectList(new[] {1,2,3,4,5,6,7,8,9,10}, 2);
我正在尝试设置默认值2
。我认为这是默认值是否正确 ^,如果是,它似乎不起作用,如果不是,这个值是什么意思?
我的项目中有一个下拉列表,此代码提供列表值
CrawlIntervalList = new SelectList(new[] {1,2,3,4,5,6,7,8,9,10}, 2);
我正在尝试设置默认值2
。我认为这是默认值是否正确 ^,如果是,它似乎不起作用,如果不是,这个值是什么意思?
这里的问题是它SelectList
不是通用的,所以它object
用作项目类型。当您将 an 传递int
给期望 an 的方法object
时,它int
会自动装箱。该装箱操作将其值包装int
在一个新的object
并将其放在堆上。每次您将值类型(如int
)分配给 type 的变量时object
,或者如果您尝试将值类型传递给期望int
.
第二个参数似乎是默认值,但是2
您传递的参数是被装箱的,这会创建一个新的object
. 同时,您的数组中的数字也被装箱(也IEnumerable
可以与 一起使用object
)。但是,这两个装箱操作是分开发生的,并且2
您的数组中的 和2
您作为第二个参数传递的 最终object
在堆上的不同位置作为不同的 s 。因此,SelectList
无法发现这两个2
s 是指同一个对象。
解决方案是让这个装箱操作只发生一次。
您可以通过手动选择默认元素或使用以下方法来解决此问题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