不能从arraylist对象上调用我的方法

所以我的问题是:
我试图从位于Achievements脚本中的方法printAchiv()中的ArrayList上的Achiv类调用方法getName(),这显然不起作用.

这是我在成就脚本中此行上收到的错误消息:
 -> Debug.Log(“ Achiv” i“:” achivList [i] .getName());

Type object' does not contain a deFinition forgetName’ and no
extension method getName' of typeobject’ Could be found (are you
missing a using directive or an assembly reference?)

我只是想从集合中的obej访问var“ name”的值.

Achiv课程

using UnityEngine;
using System.Collections;

public class Achiv : MonoBehavIoUr {

        public string name;

        public Achiv(string name )
        {
            this.name= name;
        }

        public string getName()
        {
            return name;
        }
}

成就脚本

    using UnityEngine;
    using System.Collections;

    public class Achievements: MonoBehavIoUr {

        public  ArrayList achivList = new ArrayList();

        void Start () 
        {
            achivList.Add (new Achiv("First name", "Descirptionn", false));
            achivList.Add (new Achiv("Second name", "Descirptionnn", false));

            printAchiv();
        }

        void printAchiv(){

            for (int i = 0; i <= achivList.Count - 1; i++)
                Debug.Log("Achiv "+i+": "+ achivList[i].getName());
        }   
    }

解决方法:

使用列表< Achiv>而不是ArrayList. ArrayList是过时的,不应该再使用类型安全的类型.

ArrayList的索引器返回对象,这就是您收到错误的原因.尝试以下方法.

public List<Achiv> achivList = new List<Achiv>();

除此之外,

>不要公开公开List,最好使用ReadOnlyCollection或IEnumerable.
>除非有充分的理由,否则最好选择foreach.
> printAchiv没有遵循正确的命名约定,在c#中,我们使用“ CamelCase”,将其重命名为PrintAchiv.
> get / set方法适用于不支持属性的Java样式语言.在c#中,我们改为使用属性.创建一个属性,即名称.

相关文章

前言 本文记录unity3D开发环境的搭建 unity安装 unity有中文...
前言 有时候我们希望公告牌跟随镜头旋转永远平行面向屏幕,同...
前言 经过一段时间的学习与实际开发,unity3D也勉强算是强行...
前言 在unity中我们常用的获取鼠标点击的方法有: 1、在3D场...
前言 在之前的例子中,我们都没有用到unity的精髓,例如地形...
这篇文章将为大家详细讲解有关Unity3D中如何通过Animator动画...