2009-12-01 7 views
0

나는 tabcontrol의 각 탭 페이지에 대한 부울 값을 저장하는 아주 간단한 방법을 생각해 내려고합니다. 각 페이지에는 텍스트 상자가 있고 bool foreach 페이지를 저장하려고합니다. 따라서 tabpage 1이 저장된 경우 bool1은 true로 설정되고 그렇지 않으면 false로 설정됩니다.목록에 있습니까? 사전? 정렬?

그러면 프로그램을 닫을 때 모든 탭 페이지를 검토하고 각 탭 페이지가 저장되었는지 여부를 확인합니다. 내가 검색하고 조작 할 수있는 일종의 목록을 만들 수 있어야합니다.

이전에는 태그 속성을 사용했으나 어떤 이유로 더 이상 제대로 작동하지 않습니다.

도움이 조언은 greatl 것, Y는

bael :)

이 감사 감사합니다.

+2

태그의 문제점은 무엇입니까? –

+0

Tag 속성이 null 인 경우 객체의 인스턴스로 설정되지 않는다고 종종 말하며 때때로 null이 아니더라도 같은 내용을 말합니다. 나는 일을 할 때와 다른 것을하지 않으므로 혼란 스럽다. –

+0

코드를 변경하기 전에 버그를 이해해야합니다.어떤 일이 일어날 지 모를 경우 디버거를 사용하여 철저히 검사하십시오. NullReferenceException을 얻는다면, 무언가 어딘가에 ** 실제로 ** null로 설정됩니다. – Groo

답변

4

array, nor, or dictionary는 객체 집합의 부울 상태를 추적하기위한 올바른 데이터 구조가 아닙니다. 이 작업을 수행하는 구조는 HashSet<T>입니다. T이 세트에 있거나 그렇지 않습니다.

실제로는 두 개의 상태를 유지하기 때문에 : Dictionary<T, bool>보다 우수합니다. 개체가 사전에 있는지 여부와 그 값이 true 또는 false인지 여부를 나타냅니다.

두 가지 이유 때문에 List<T>보다 우수합니다. 더 빠르고 (거의 확실하게 무시할 수 있음), 포함하는 개체의 순서에 의미가 있음을 의미하지는 않습니다. HashSet<T>의 개체 순서는 임의적입니다.

+0

'Dictionary vs'HashSet '과 관련하여 동의합니다.하지만 처음에는 약간의 오해가있을 수 있습니다. 즉,'HashSet '을 통해'Dictionary '를 선호 할 것입니다. 왜냐하면 장래에 각 페이지에 ** 데이터 또는 기능 **을 첨부 할 수있는 옵션을 제공 할 것이기 때문입니다. – Groo

+0

'HashSet '을 선택하면 YAGNI가 실제로 작동합니다. –

4

예 : Dictionary<TabPage,bool>을 사용할 수 있습니다. 응용 프로그램의 시작시 :

var pageStates=new Dictionary<TabPage,bool>(); 

foreach(var page in tabControl.TabPages) { 
    pageStates.Add(page, false); 
} 

은 TabPage의 상태를 변경하려면 :

pageStates[page]=true; 

을 때 응용 프로그램이 종료 :

foreach(var page in TabControl.TabPages) { 
    if(pageStates[page]) { 
     //The page is saved 
    } 
} 
+0

도움을 주셔서 감사하며 또한 코드 샘플을 제공하는 데 시간을내어 주셔서 감사합니다 :) –

4

List<TabPage>

스토어 만을 탭 페이지를 저장해야합니다. 비어 있으면 아무것도 저장할 필요가 없습니다.

1

요소를 제거하거나 추가하지 않고 반복하는 경우 배열을 사용하십시오.

반복하면서 요소를 추가하고 제거하는 경우 목록을 사용하십시오.

문자열을 키로 사용하는 경우 사전을 사용하십시오.

사전은 목록과 비교하여 요소 수가 많은 매우 빠른 검색 성능을 제공합니다.

관련 문제