私のプロジェクトにはドロップダウンリストがあり、このコードはリストの値を提供します
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
、アイテムタイプとして使用することです。int
を期待するメソッドにを渡すとobject
、それint
は自動的にボックス化されます。そのボクシング操作は、その値をint
新しいものにラップobject
し、ヒープに配置します。int
このボクシング操作は、型の変数に値型(など)を割り当てるたびにobject
、または。を期待するメソッドに値型を渡そうとした場合に再び発生しますint
。
2番目のパラメーターはデフォルト値のようですが、2
渡したものはボックス化されており、の新しいインスタンスが作成されますobject
。同時に、配列内の数値もボックス化されています(、でもIEnumerable
機能しobject
ます)。ただし、これら2つのボクシング操作は別々に発生し2
、配列内と2
2番目のパラメーターとして渡したものobject
は、ヒープ上の異なる場所で異なるsになります。したがって、は、これら2つのが同じオブジェクトを参照することを意図していることSelectList
を知る方法がありません。2
解決策は、このボクシング操作を1回だけ実行することです。
これを回避するには、デフォルトの要素を手動で選択するか、:を使用しますobject[]
。
object[] values = new object[] {1,2,3,4,5,6,7,8,9,10};
CrawlIntervalList = new SelectList(values, values[1]);
それではなく、を作成することにより、そのobject[]
中のすべての整数がボックス化されobject
、参照が作成されます。2番目のパラメーターとして渡すことによりvalues[1]
、正しい参照がコンストラクターに渡されることを確認します。
ボクシングの詳細については、こちらをご覧ください:http:
//msdn.microsoft.com/en-us/library/yz2be5wk.aspx