微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不能从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#中,我们改为使用属性.创建一个属性,即名称.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐