2013-02-28 3 views
0

나는 목록을 제공하는이 코드와 함께, 내 프로젝트에서 드롭 다운 목록을 가지고 내가 2의 기본값을 설정하려고selectList의 기본값

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

값. 이게 기본 값이라고 생각하는 것이 맞습니까 ^, 그렇지 않다면이 값의 의미는 무엇입니까?

답변

2

여기서 문제는 SelectList이 일반이 아니므로 항목 유형으로 object을 사용한다는 것입니다. object을 예상하는 메서드에 int을 전달하면 해당 int이 자동으로 입력됩니다. 그 권투 작업은 그 int의 값을 새로운 object에 래핑하고 힙에 놓습니다. 이 권투 작업은 object 유형의 변수에 값 유형 (예 : int)을 할당 할 때마다 또는 int을 예상하는 메소드에 값 유형을 전달하려고 시도 할 때마다 다시 발생합니다.

두 번째 매개 변수는 기본값을 것 같다,하지만 2 당신이 object의 새로운 인스턴스를 생성을, 박스되고 있습니다 전달합니다. 동시에 배열의 숫자도 박스로 묶입니다 (IEnumerableobject과 작동 함). 이 두 복싱 작업은 별도로 발생하지만 어레이의 2과 두 번째 매개 변수로 전달한 2은 힙의 다른 위치에 다른 object으로 끝납니다. 따라서, SelectList은이 두 가지가 동일한 객체를 나타 내기위한 것임을 알 수있는 방법이 없습니다.

해결 방법은이 권투 작업을 한 번만 수행하는 것입니다.

당신이 중 하나를 수동으로 기본 요소를 선택하거나 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

+0

큰 일! 고마워요 –

+0

@ 잭 알렌. 천만에. 그것이 당신의 문제를 해결했다면 이것을 대답으로 받아 들일 수 있습니다 :) – Botz3000