2012-06-28 3 views
1

나는 사용자가 원하는만큼 많은 이미지를 열 수있는 이미지 처리 프로그램을 작성 중이다. 사용자가 이미지를 열 때마다 프로그램은 MyClass 클래스에 의해 정의 된 개체를 만들어야합니다. 분명히 "이미지 열기"(예 : 메뉴 -> 파일 열기 -> 열기 ... 버튼 클릭) 메서드 내에서이 개체를 만들면 개체가이 메서드에서만 인식되며 UI의 다른 메서드에서는 쓸모가 없습니다. UI 클래스 내에서 배열을 만든 다음 MyClass [i]에 개체를 할당하고 i를 계속 계산할 수는 있지만 사용자가 열려고하는 이미지의 수를 알 수 없기 때문에 옵션이 아닙니다. 또한 사용자는 이미지를 다시 닫을 수 있어야합니다. 즉,이 인덱스는 쓸모가 없습니다.동적으로 객체 생성 및 지우기

어떻게 든 개체를 동적으로 추가 및 제거 할 수있는 개체 모음이있는 방법이 있습니까? 개체는이 컬렉션 내에서 파일 이름을 말하면 자신을 식별 할 수 있어야합니다.

나는 C#에 대해 매우 익숙하다. 가능한 한 자세하게 모든 것을 설명하도록 노력한다.

답변

1

목록과 같은 동적 데이터 구조가 필요합니다.

일반 (즉, 목록) 또는 비 일반 (목록) 버전 중 하나를 사용할 수 있습니다. 목록을 사용하면 항목을 동적으로 추가 또는 삽입하고 색인을 결정하며 원하는대로 항목을 제거 할 수 있습니다.

목록 작업을 사용함에 따라 목록 크기가 동적으로 커지고 축소됩니다. 사용하여 사전에 의해

// instantiation of an empty list 
List<Image> list = new List<Image>(); 

// create ten images and add them to the list (append at the end of the list at each iteration) 
for (int i = 0; i <= 9; i++) { 

    Image img = new Image(); 
    list.Add(img); 
} 

// remove every second image from the list starting at the beginning 
for (int i = 0; i <= 9; i += 2) { 

    list.RemoveAt(i); 
} 

// insert a new image at the first position in the list 
Image img1 = new Image(); 
list.Insert(0, img1); 

// insert a new image at the first position in the list 
IMage img2 = new Image(); 
list.Insert(0, img2); 

대체 방법 :

Dictionary<string, Image> dict = new Dictionary<string, Image>(); 

for (int i = 0; i <= 9; i++) { 

    Image img = new Image(); 

    // suppose img.Name is an unique identifier then it is used as the images keys 
    // in this dictionary. You create a direct unique mapping between the images name 
    // and the image itself. 
    dict.Add(img.Name, img); 
} 

// that's how you would use the unique image identifier to refer to an image 
Image img1 = dict["Image1"]; 
Image img2 = dict["Image2"]; 
Image img3 = dict["Image3"]; 
+0

이게 좋겠지 만, 파일 이름과 같은 일부 키워드로 개체를 현지화 할 수 있습니까? – phil13131

+0

번호 인덱스로 색인화 된 목록으로, 정수 여야합니다. 숫자 인덱스가 아닌 다른 값으로 이미지의 주소를 지정하려면 사전을 사용해야합니다. 나는 내 대답을 연장 할 것이다. –

+0

고마워, 리드 코세 이는 또한 사전을 제안했다. – phil13131

1

Dictionary<TKey,TValue>에 개체를 저장할 수 있습니다. 이 경우 Dictionary<string, MyClass>을 원할 것입니다.

이렇게하면 (파일 이름 일 수 있음)을 기준으로 항목을 검색하고 보관할 수 있습니다.

+0

나는 사전을 추가하려고 <문자열

이 이미지는 당신이 그런 목록을 사용할 수있는 이미지 유형의 객체로 표시됩니다 가정 해 , MyClass>에서 errormessage가 발생했습니다 : "비 generic 유형 'System.IO.Directory'는 유형 인수와 함께 사용할 수 없습니다." – phil13131

+0

@ phil13131 상단에 using using System.Collections.Generic;을 추가하십시오. 파일 ... 또한 ** ** ** 디렉토리가 아닙니다 ** ( –

+0

그것은 이미 포함되었습니다. MyClass와 관련이 있습니까? 특정 속성이 필요합니까? – phil13131

관련 문제