所以我的问题是:
我试图从位于Achievements脚本中的方法printAchiv()中的ArrayList上的Achiv类调用方法getName(),这显然不起作用.
这是我在成就脚本中此行上收到的错误消息:
-> Debug.Log(“ Achiv” i“:” achivList [i] .getName());
Type
object' does not contain a deFinition for
getName’ and no
extension methodgetName' of type
object’ 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#中,我们改为使用属性.创建一个属性,即名称.