2013-04-09 6 views
1

내 프로그램에는 앨범이라는 클래스가 있습니다. 내 앨범 객체가 생성 될 때 Array가 있습니다. 원하는 경우 나중에 앨범의 앨범 이름을 사용자가 변경할 수 있도록해야합니다. 원하는 경우 사용자가 배열에서 앨범을 삭제할 수 있도록해야합니다. 알다시피, 배열에서 객체를 삭제할 수는 없으므로 Array가 아닌 List에 저장하면 좋다.배열에서 요소 제거 : 목록으로 변환, 요소 제거, 배열로 다시 변환 하시겠습니까?

List (내가 전에는 사용하지 않았다)에서 알 수 있듯이 앨범 객체의 변수를 나중에 변경하려는 경우 앨범 객체를 Array 대신 Array에 넣을 수 없습니다 . 또한 앨범 객체는 앨범 객체를 잃어버린 Array (myMusics)를 저장하므로 앨범 객체를 삭제하고 목록의 새 객체로 대체 할 수 없습니다.

내 질문에, 사용자가 앨범 개체를 변경하고 삭제하도록 허용하려면 어떻게해야합니까? 목록에 저장된 배열을 변경해야 할 것 같아요. 그런 다음 List에서 객체를 삭제 한 다음 List를 다시 같은 Array로 변경합니다. 이 올바른지? 이 문제를 해결하는 것이 옳은 방법이라면 어떻게해야합니까?

또한 도움이되거나 효과가 있다면 앨범이 들어있는 배열이 Form1에서 만들어지고 앨범 개체는 Form1에서 삭제되지만 Album 개체의 albumName은 Form2에서 변경됩니다.

도움을 주시면 감사하겠습니다. 나는 C#을 사용하는 것에 익숙하지 않기 때문에 이해하는 데 도움이되는 코드의 예가 환상적이다. 고맙습니다.

앨범 클래스 :

public class Album 
{ 
    public string albumName; 
    private int totalMusics; 
    private const int MAX_MUSICS = 100; 
    private Music[] myMusics; 

    public Album(string albumName) 
    { 
     this.albumName = albumName; 
     totalMusics = 0; 
     myMusics = new Music[MAX_MUSICS]; 
    } 
} 
+0

배열 –

+1

대신'List '을 사용하십시오. 앨범이 목록에있는 경우 앨범의 이름을 변경할 수 있습니다. 목록을 사용하십시오. –

+0

'Array.FindAll'은 당신의 친구입니다. – leppie

답변

0

From what I understand of Lists (I haven't used them before this), I can't put the Album objects into a List instead of an Array on creation if I want to change a variable in the Album object later.

구조체 만 사실이다. (변경 가능) 클래스을 사용하고 있으므로 객체가 List<Album>에 저장되어있는 동안 객체의 속성을 변경할 수 있습니다.

따라서 List을 사용해야합니다.

예를 들어, AlbumName에 의해 일부 필드로 앨범을 조회하고 싶지 않은 경우가 아니면. 그렇다면 Dictionary<string, Album>을 사용하고 키에 AlbumName을 사용할 수 있습니다.

+0

응답 해 주셔서 감사합니다. 오류가 발생합니다 : 'MusicCollection.Form1.AlbumList '는 메서드처럼 다음 줄과 함께 사용할 수 없습니다. formMain.AlbumList (formMain.AlbumsListBox.SelectedItem) .albumName = NameTextBox.Text; (formMain은 Form2에서 Form1을 참조하는 방법입니다.) 앨범의 albumName을 변경하려면 어떻게해야합니까? – user2251281

+0

AlbumList는 다음과 같이 Form1의 맨 처음에 선언됩니다. public List AlbumList; – user2251281

+1

다음과 같이 인덱스 연산자'()'는 함수 호출'()'을 사용하지 말아야합니다 :'formMain.AlbumList [formMain.AlbumsListBox.SelectedItem] .albumName = ... ' –

0

난 당신이 모두 함께 List<Music>Music를 저장 건의 할 것입니다. C#List의 다른 언어와 달리 실제로는 상수 인덱싱 작업이 동적으로 확장 가능한 배열 []입니다.

마지막으로 생각한 목록 이외의 다른 요소를 삭제하면 요소를 이동시키는 추가 작업이 필요함을 명심하십시오. List에서 음악 순서를 신경 쓰지 않는다면 앨범을 삭제하기 전에 먼저 List의 마지막 앨범으로 바꾼 다음 List의 마지막 요소를 삭제하십시오.