SelectList默认值

时间:2013-02-28 10:56:44

标签: c# html.dropdownlistfor selectlist

我的项目中有一个下拉列表,此代码提供列表值

CrawlIntervalList = new SelectList(new[] {1,2,3,4,5,6,7,8,9,10}, 2);

我正在尝试设置默认值2。我认为这是默认值^,如果它似乎不起作用,如果没有,这个值意味着什么?

1 个答案:

答案 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