카테고리 없음

클래스 타입의 리스트를 인덱스로 출력할때 파일명.클래스명이 나오는 이유

이더23 2024. 9. 24. 17:25

문제점

클래스 타입의 리스트를 인덱스형식으로 출력할려고 하니 파일명.클래스명 이 출력이 됐다.

public List<Item> inventory = new List<Item>();

 

for (int i = 0; i < Program.character.inventory.Count; i++)
{
    Console.WriteLine(Program.character.inventory[i]);
}

해결방안

for (int i = 0; i < Program.character.inventory.Count; i++)
{
    Console.WriteLine(Program.character.inventory[i].itemname);
}

배열 뒤에 .아이템명 변수 를 넣으면 아이템 이름이 출력이 된다.

질문

아이템 정보들을 다 출력하기 위해서는 어떻게 해야하나요?

해결방안

문자열을 반환하는 함수를 만들어서 함수를 호출해오면 된다.

시도

1. n개의 문자열을 반환하는 함수를 만들려고 반환값에 string[]배열을 줘서 해봤는데

에러메세지 = system.argumentoutofrangeexception: 'index was out of range. must be non-negative and less than the size of the collection. arg_paramname_name'

이런 에러메세지가 뜨면서 실행이 중단이 됐다.

 

2. 필요로 하는 곳에서 for문을 돌려서 i로 값을 받아오기

처음에는 for문의 조건식의 최대 크기를 다른 함수의 변수를 사용해서 오류가 계속 발생을 했다.

그러다 내가 잘못된 코드를 적고 있다는거를 깨닫고, 수정한 결과 내가 원하는 대로 실행이 됐다.

(그때까지 진짜 오랜 시간이 지났다.......)

 

코드

클래스에서 함수를 생성

public string ItemString(int i)
{
    if (inventory[i].itemE == false)
    {
        if (inventory[i].atk > 0)
        {
            item = "-  " + (i + 1) + " " + inventory[i].itemname.PadRight(12) + "  ㅣ " + "공격력 +" + inventory[i].atk + " ㅣ " + inventory[i].explanation;
        }
        else
        {
            item = "-  " + (i + 1) + " " + inventory[i].itemname.PadRight(12) + "  ㅣ " + "방어력 +" + inventory[i].def + " ㅣ " + inventory[i].explanation;
        }
    }
    else if (inventory[i].itemE == true)
    {
        if (inventory[i].atk > 0)
        {

            item = "-  " + (i + 1) + " [E]" + inventory[i].itemname.PadRight(12) + "  ㅣ " + "공격력 +" + inventory[i].atk + " ㅣ " + inventory[i].explanation;
        }
        else
        {
            item = "-  " + (i + 1) + " [E]" + inventory[i].itemname.PadRight(12) + "  ㅣ " + "방어력 +" + inventory[i].def + " ㅣ " + inventory[i].explanation;
        }
    }

    return item;
}

 

 

함수를 정의 한 후에 필요한 부분에서

for (int i = 0; i < Program.character.inventory.Count; i++)
{
    Console.WriteLine(Program.character.ItemString(i));
}

이 반복문을 이용해서 문자열을 가져오면 된다.

 

느낀점

코드 무작정 작성하지말고 하나하나 좀더 깊게 생각하면서 작성하자!!