Cách khắc phục chỉ mục nằm ngoài phạm vi. Phải không âm và nhỏ hơn kích thước của bộ sưu tập.

lập trình


Tôi đã mã hóa nó để nó hiển thị một thẻ, ngoại trừ nó không hiển thị,
Mật mã:

   public List<card> displayCard = new List<card>();
    public int displayId;

    public int id;
    public string cardName;
    public int cost;
    public int power;
    public string cardDescription;

    
    public Text nameText;   
    public Text costText;
    public Text powerText;
    public Text descriptionText;
  


    


    // Start is called before the first frame update    
    void Start()
    {
        displayCard[0] = CardDatabase.cardList[displayId];
    }

    // Update is called once per frame
    void Update()
    {
         id = displayCard[0].id;
         cardName = displayCard[0].cardName;
         cost = displayCard[0].cost;
         power = displayCard[0].power;
         cardDescription = displayCard[0].cardDescription;
       

       nameText.text = " " + cardName;
       costText.text = " " + cost;
       powerText.text = " " + power;
       descriptionText.text = " " + cardDescription;
    }
}

I have the cards on a different script

What I have tried:

Changing the card id etc. Rewriting it incase i forgot something, idk what esle to do

Giải pháp 1

Đây chỉ là phỏng đoán từ mã nhỏ bạn đã hiển thị ở đây. Tôi cho rằng lỗi của bạn xảy ra trong phương thức Bắt đầu vì có vẻ như đây là lỗi đầu tiên được gọi theo mô tả sự cố của bạn. Sử dụng trình gỡ lỗi và đặt điểm dừng ở dòng được chỉ báo lỗi để xem chính xác điều gì đang xảy ra.

Ở đầu mã, bạn đã tạo một Danh sách mới (displayCard) có thể chứa một số đối tượng “thẻ” (dung lượng mặc định). Tuy nhiên, tại thời điểm này nó trống rỗng và không có thẻ trong đó.

Trong phương thức Bắt đầu (và trong Cập nhật), bạn cố gắng sử dụng đối tượng thẻ ở chỉ mục 0 của displayCard – nhưng không có thẻ nào trong đó nên 0 nằm ngoài phạm vi. Bạn cần đặt một thẻ (Thêm phương pháp là một cách) vào danh sách trước.

Một lần nữa, đây chỉ là phỏng đoán vì tôi không thấy mã nào thêm đối tượng thẻ vào displayCard trước khi bạn cố gắng sử dụng chỉ mục 0. Nếu có mã để thực hiện việc này, hãy sử dụng trình gỡ lỗi để tìm hiểu điều gì đang xảy ra. Những công cụ có giá trị mà những trình gỡ lỗi đó lấy từ một người đã bắt đầu sử dụng hệ thống mà không có hệ thống.

Giải pháp 2

Để bổ sung thêm vào những gì FreedMalloc đã nói, một mảng hoặc bộ sưu tập ind3exable giống như một List<T> chứa đựng N các phần tử có giá trị chỉ mục hợp lệ từ 0 ĐẾN N - 1.
Vì vậy, một List<int> chứa ba giá trị

C#
List<int> myNumbers = new List<int>() {10, 20, 30};

Sẽ có ba chỉ mục hợp lệ: 0, 12 – bất kỳ giá trị nào khác (dương hoặc âm) sẽ cung cấp cho bạn ngoại lệ “Chỉ mục nằm ngoài phạm vi”

Vì mã của bạn rõ ràng sử dụng chỉ mục của 0và bạn nhận được một ngoại lệ ngoài phạm vi, điều đó có nghĩa là bộ sưu tập của bạn trống: nó không có phần tử nào nên không có chỉ mục hợp lệ.

Giải pháp cho vấn đề đó là thêm ít nhất một card vào bộ sưu tập!

Nhưng … mã của bạn có vẻ thực sự lộn xộn: Tôi không biết mã bạn hiển thị thuộc lớp nào, nhưng có hai khả năng:
1) Mã đó là một phần của card lớp học. Nếu vậy thì nó không nên truy cập vào các thành phần hiển thị như nameText, costText, powerTextdescriptionText bởi vì chúng là một phần của biểu mẫu của bạn chứ không phải thẻ.

2) Mã đó là một phần của biểu mẫu của bạn. Nếu vậy thì nó không nên có các giá trị liên quan đến thẻ như cardName, cost, powercardDescription bởi vì họ là một phần của cá nhân card và nên được chứa ở đó thay vì trùng lặp.

Hãy suy nghĩ về những gì bạn đang cố gắng thực hiện: Tôi nghi ngờ bạn hơi mơ hồ về khái niệm lớp và phiên bản, cũng như các bộ sưu tập! 😀

コメント

タイトルとURLをコピーしました