SelectList default value

本文关键字:value default SelectList | 更新日期: 2023-09-27 18:01:44

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

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

我试图设置2的默认值。我认为这是默认值^,如果它似乎不工作,如果不是,这个值意味着什么?

SelectList default value

这里的问题是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