0

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

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

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

4

1 回答 1

2

这里的问题是它SelectList不是通用的,所以它object用作项目类型。当您将 an 传递int给期望 an 的方法object时,它int会自动装箱。该装箱操作将其值包装int在一个新的object并将其放在堆上。每次您将值类型(如int)分配给 type 的变量时object,或者如果您尝试将值类型传递给期望int.

第二个参数似乎是默认值,但是2您传递的参数是被装箱的,这会创建一个新的object. 同时,您的数组中的数字也被装箱(也IEnumerable可以与 一起使用object)。但是,这两个装箱操作是分开发生的,并且2您的数组中的 和2您作为第二个参数传递的 最终object在堆上的不同位置作为不同的 s 。因此,SelectList无法发现这两个2s 是指同一个对象。

解决方案是让这个装箱操作只发生一次。

您可以通过手动选择默认元素或使用以下方法来解决此问题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-28T11:04:55.733 回答